ניהול מסמכים

ניהול מסמכים

ניהול מסמכים

Document הוא נקודת הכניסה לכל פעולה של ניהול מסמכים שמכוסה כאן: פתיחה ושמירת קבצים, ייצוא ל-HTML, הוספת שכבות תוכן אופציונליות, יצירת Tagged PDF, וקריאה או כתיבה של נתוני AcroForm. Page ו-Form נגישים דרך Document.Page(n) ו-Document.Form().


פתיחה ושמירת מסמכים

pdf.Open טוען קובץ PDF ממסלול קובץ; pdf.OpenWithPassword עושה זאת עבור קבצים המוגנים בסיסמה. Document.Save כותב את התוצאה למסלול קובץ חדש.

doc, err := pdf.Open("input.pdf")
if err != nil {
	panic(err)
}

_, err = pdf.OpenWithPassword("locked.pdf", "userpassword")
if err != nil {
	panic(err)
}

err = doc.Save("output.pdf")

ייצוא ל-HTML

Document.SaveHTML ו-Document.WriteHTML ממירים מסמך ל-HTML. HTMLSaveOptions.Mode בוחר את הייצוג: HTMLModeText (טקסט מעוצב נראה על רקע רסטר ללא גליפים), HTMLModeNative (גרפיקת עמוד כשכבת SVG אינליין אחת), או HTMLModeFlow (HTML זורם מחדש עם כותרות ופסקאות בסדר הקריאה). השארת Mode ללא הגדרה מייצרת את ברירת המחדל הנאמנה: רסטר מלא של העמוד עם שכבת טקסט ניתנת לבחירה ושקופה.

doc, _ := pdf.Open("input.pdf")

// Faithful mode (default)
doc.SaveHTML("out.html")

// Visible-text mode
doc.SaveHTML("out.html", pdf.HTMLSaveOptions{Mode: pdf.HTMLModeText})

// Multi-file output: external resources plus one HTML file per page
doc.SaveHTML("site/doc.html", pdf.HTMLSaveOptions{
    Mode: pdf.HTMLModeNative, ResourceDir: "assets", SplitPages: true,
})

// Page subset, custom raster DPI and title
doc.SaveHTML("part.html", pdf.HTMLSaveOptions{Pages: []int{1, 3}, DPI: 96, Title: "Report"})

ניהול שכבות תוכן אופציונליות

Document.AddLayer(name) יוצר קבוצה אופציונלית של תוכן חדשה ומחזיר *Layer; Document.Layers() מציג את כל השכבות שכבר קיימות. Page.BeginLayer / Page.EndLayer מסמנים את תוכן הדף כשייך לשכבה, ו-Layer.SetVisible(false) מסתיר את התוכן.

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
layer := doc.AddLayer("Watermark")

page, _ := doc.Page(1)
page.BeginLayer(layer)
page.AddText("DRAFT", pdf.TextStyle{Font: pdf.FontHelveticaBold, Size: 48},
    pdf.Rectangle{LLX: 150, LLY: 400, URX: 450, URY: 460})
page.EndLayer()

layer.SetVisible(false)
doc.Save("layered.pdf")

בניית קבצי PDF מתוייגים (נגישים)

Document.TaggedContent() מחזיר את המעטפת *TaggedContent שבבעלותה עץ המבנה הלוגי של המסמך ומגדיר את מטא-נתוני הקטלוג כפי ש-PDF/UA דורש. Page.TagContent משגר קריאת ציור בתוכן מסומן ומחזיר *StructElement עבור הצומת הזאת.

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
tc := doc.TaggedContent()
tc.SetTitle("Quarterly Report")
tc.SetLanguage("en-US")
page, _ := doc.Page(1)

page.TagContent(tc.Root(), pdf.StructH1, func() error {
    return page.AddText("Quarterly Report", pdf.TextStyle{Font: pdf.FontHelveticaBold, Size: 24},
        pdf.Rectangle{LLX: 50, LLY: 760, URX: 545, URY: 800})
})
fig, _ := page.TagContent(tc.Root(), pdf.StructFigure, func() error {
    return page.AddImage("chart.png", pdf.Rectangle{LLX: 50, LLY: 540, URX: 300, URY: 680})
})
fig.SetAlt("Bar chart of Q3 sales by region") // required for figures

doc.Save("accessible.pdf")

קיבוץ אלמנטים מתמקמים גם תחת שורש העץ:

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
tc := doc.TaggedContent()
page, _ := doc.Page(1)

tbl := tc.Root().AddChild(pdf.StructTable)
row := tbl.AddChild(pdf.StructTR)
cell := row.AddChild(pdf.StructTD)
page.TagContent(cell, pdf.StructP, func() error { return nil })

ייצוא וייבוא של נתוני טופס כ-JSON

Form.ExportJSON מסדרת כל סוג שדה וערך ל-JSON ({"name": {"type": "text", "value": "Jane"}, ...}); Form.ImportJSON מחילה עומס JSON על טופס ומחזירה את מספר השדות שהעדכן. JSONExportOptions.Indent מדפיסה את הפלט בצורה קריאה.

doc, _ := pdf.Open("filled.pdf")
data, _ := doc.Form().ExportJSON(pdf.JSONExportOptions{Indent: true})

// Fill a template from a JSON payload; discard the applied-field count.
template, _ := pdf.Open("template.pdf")
_, _ = template.Form().ImportJSON(data)

טיפים ושיטות עבודה מומלצות

  • בחרו ב-HTMLModeNative לדפים בעלי משקל וקטורי גבוה, ב-HTMLModeFlow לקריאה עם זרימה מחדש/ניידת, ובברירת המחדל הנאמנה (בלי להגדיר Mode) כאשר חשובה ביותר האמינות החזותית.
  • הקרא ל-Layer.SetVisible(false) לפני Save כדי להסתיר שכבות סימן מים או הערות כברירת מחדל תוך שמירה על האפשרות לגשת לתוכן דרך האובייקט Layer.
  • הגדר את TaggedContent.SetTitle ו-SetLanguage לפני קריאת Page.TagContent, מכיוון שהאימות PDF/UA בודק את המטה-נתונים ברמת הקטלוג שהשיטות הללו כותבות.
  • הקרא ל-StructElement.SetAlt בכל צומת StructFigure — ציורים ללא טקסט חלופי נכשלים באימות PDF/UA.
  • השתמש ב-JSONExportOptions.Indent לצורך השוואה קריאה לבני אדם של מצב הטופס המיוצא; השמט אותו עבור מטענים קומפקטיים בין-מכונה-ל-מכונה.

בעיות נפוצות

בעיהסיבהתיקון
HTML הפלט אינו מכיל גליפים של טקסט שניתן לבחורHTMLSaveOptions.Mode נשאר בברירת המחדל הנאמנה ללא דרישת שכבת טקסטהגדר Mode: pdf.HTMLModeText עבור שכבת טקסט גלויה ומעוצבת
הייצוא של HTML מאבד את המראה של הגופן המקוריNoFontEmbedding מוגדר ל trueהשאר את NoFontEmbedding false (ברירת מחדל) כך שהגופנים המוטמעים יועטפו מחדש ככתובות URL של נתוני WOFF @font-face
Page.TagContent מחזיר שגיאהקרא לפני ש-Document.TaggedContent() אתחלה את עץ המבנההפעל Document.TaggedContent() (והגדר כותרת/שפה) לפני הקריאה הראשונה ל-TagContent
ValidatePDFUA מדווח על אי-התאמה של איוריםאלמנט StructFigure חסר טקסט altהפעל StructElement.SetAlt על כל צומת של איור
Form.ImportJSON מעדכן פחות שדות מהצפוישמות השדות של העומס של JSON אינם תואמים לשמות השדות בטופס היעד; הייבוא סובלן ומדלג על ערכים שלא תואמיםאשר ששמות השדות המיוצאים תואמים בדיוק לשמות השדות של טופס היעד

FAQ

איזה HTML מצב ייצוא עלי לבחור?

HTMLModeText עבור הפלט הקטן ביותר, שניתן לבחור בו במלואו; HTMLModeNative כאשר דיוק הווקטור (עקומות, קווים טבעיים) חשוב יותר מגודל הקובץ; HTMLModeFlow עבור פריסת קריאה ניתנת לשינוי, ידידותית למובייל. השאר Mode ללא הגדרה עבור ברירת המחדל של רסטר עם טקסט שקוף מדויק.

האם אוכל לייצא רק דפים ספציפיים ל HTML?

כן. הגדר את HTMLSaveOptions.Pages לרצף של מספרי דפים שמתחילים מ-1, למשל pdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []int{1, 3}}}}.

איך להסתיר שכבה כברירת מחדל אך לאפשר לצופה להפעילה מחדש?

קרא לLayer.SetVisible(false) לפני השמירה. השכבה נשארת קבוצה של תוכן אופציונלי שניתן לגשת אליה; Layer.IsVisible() מדווחת על המצב הנוכחי שלה.

האם ייצוא הטופס JSON כולל סוגי שדות?

כן. כל שדה מיוצא הוא אובייקט JSON עם מפתחות type ו-value, לדוגמה {"subscribe": {"type": "checkbox", "value": true}}.

האם צריך לקרוא ל TagContent עבור כל אלמנט, או שניתן לקבץ קבוצות ישירות?

שניהם. Page.TagContent עוטף קריאת ציור ומוסיף אלמנט של מבנה עלה. כדי לקבץ אלמנטים (טבלאות, רשימות), קרא לStructElement.AddChild על שורש העץ או על אלמנט אב כדי לבנות את הקיבוץ תחילה, ואז תייג את תוכן העלה מתחתיו.


API Reference סיכום

מחלקה/מתודהתיאור
Document.SaveHTML / WriteHTMLייצא את המסמך ל-HTML, נשלט על ידי HTMLSaveOptions
HTMLSaveOptionsHTML תצורת ייצוא: מצב, DPI, תת-קבוצת דפים, טיפול במשאבים
Document.AddLayer / Layersצור או רשום קבוצות תוכן אופציונליות במסמך
Page.BeginLayer / EndLayerסמן את תוכן העמוד כמשויך לשכבה
Layerקבוצת תוכן אופציונלית — שם ונראות
Document.TaggedContentחזית עבור עץ המבנה הלוגי של המסמך (PDF מתויג)
TaggedContentמגדיר את כותרת/שפת המסמך ומחשוף את שורש עץ המבנה
Page.TagContent / TagArtifactקריאות ציור בסוגריים בתוכן מסומן ובאלמנטים של המבנה
StructElementצומת בעץ המבנה הלוגי — ילדים, טקסט חלופי, שפה
Form.ExportJSON / ImportJSONלסריאליזציה או ליישום של נתוני השדה AcroForm כ-JSON
JSONExportOptionsתצורת ייצוא JSON: הזחה, השמטת-ריק

ראה גם

 עברית