Skip to content

Commit d3e607d

Browse files
committed
Fix #807
1 parent 4527ff4 commit d3e607d

File tree

22 files changed

+58
-7
lines changed

22 files changed

+58
-7
lines changed

pkg/api/importImage.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ func ImportImages(rs io.ReadSeeker, w io.Writer, imgs []io.Reader, imp *pdfcpu.I
7777
return err
7878
}
7979

80+
if err := ctx.SetValid(*indRef); err != nil {
81+
return err
82+
}
83+
8084
if err = model.AppendPageTree(indRef, 1, pagesDict); err != nil {
8185
return err
8286
}

pkg/pdfcpu/create/create.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,10 @@ func appendPage(
510510
return err
511511
}
512512

513+
if err := ctx.SetValid(*ir); err != nil {
514+
return err
515+
}
516+
513517
if err := model.AppendPageTree(ir, 1, pagesDict); err != nil {
514518
return err
515519
}

pkg/pdfcpu/cut.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,10 @@ func createOutline(
208208
return err
209209
}
210210

211+
if err := ctxDest.SetValid(*pageIndRef); err != nil {
212+
return err
213+
}
214+
211215
if err := migratePageDict(d1, *pageIndRef, ctxSrc, ctxDest, migrated); err != nil {
212216
return err
213217
}
@@ -428,6 +432,10 @@ func createTiles(
428432
return err
429433
}
430434

435+
if err := ctxDest.SetValid(*pageIndRef); err != nil {
436+
return err
437+
}
438+
431439
if err := migratePageDict(d1, *pageIndRef, ctxSrc, ctxDest, migrated); err != nil {
432440
return err
433441
}

pkg/pdfcpu/merge.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -757,6 +757,7 @@ func createDividerPagesDict(ctx *model.Context, parentIndRef types.IndirectRef)
757757
if err != nil {
758758
return nil, err
759759
}
760+
ctx.SetValid(*indRefPageDict)
760761

761762
d.Insert("Kids", types.Array{*indRefPageDict})
762763

pkg/pdfcpu/model/image.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ func ImageFileNames(dir string, maxFileSize types.ByteSize) ([]string, error) {
7070
return nil, err
7171
}
7272
fn := []string{}
73-
for _, fi := range files {
73+
for i := 0; i < len(files); i++ {
74+
fi := files[i]
7475
fileInfo, err := fi.Info()
7576
if err != nil {
7677
continue

pkg/pdfcpu/model/resize.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ func parsePageFormatRes(s string, res *Resize) error {
106106

107107
if (d.Portrait() && landscape) || (d.Landscape() && portrait) {
108108
d.Width, d.Height = d.Height, d.Width
109+
res.EnforceOrient = true
109110
}
110111

111112
res.PageDim = d

pkg/pdfcpu/model/xreftable.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -889,18 +889,23 @@ func (xRefTable *XRefTable) UndeleteObject(objectNumber int) error {
889889
return nil
890890
}
891891

892-
// IsValid returns true if the object referenced by ir has already been validated.
893-
func (xRefTable *XRefTable) IsValid(ir types.IndirectRef) (bool, error) {
894-
entry, found := xRefTable.FindTableEntry(ir.ObjectNumber.Value(), ir.GenerationNumber.Value())
892+
// IsValidObj returns true if the object with objNr and genNr is valid.
893+
func (xRefTable *XRefTable) IsValidObj(objNr, genNr int) (bool, error) {
894+
entry, found := xRefTable.FindTableEntry(objNr, genNr)
895895
if !found {
896-
return false, errors.Errorf("pdfcpu: IsValid: no entry for obj#%d\n", ir.ObjectNumber.Value())
896+
return false, errors.Errorf("pdfcpu: IsValid: no entry for obj#%d\n", objNr)
897897
}
898898
if entry.Free {
899-
return false, errors.Errorf("pdfcpu: IsValid: unexpected free entry for obj#%d\n", ir.ObjectNumber.Value())
899+
return false, errors.Errorf("pdfcpu: IsValid: unexpected free entry for obj#%d\n", objNr)
900900
}
901901
return entry.Valid, nil
902902
}
903903

904+
// IsValid returns true if the object referenced by ir is valid.
905+
func (xRefTable *XRefTable) IsValid(ir types.IndirectRef) (bool, error) {
906+
return xRefTable.IsValidObj(ir.ObjectNumber.Value(), ir.GenerationNumber.Value())
907+
}
908+
904909
// SetValid marks the xreftable entry of the object referenced by ir as valid.
905910
func (xRefTable *XRefTable) SetValid(ir types.IndirectRef) error {
906911
entry, found := xRefTable.FindTableEntry(ir.ObjectNumber.Value(), ir.GenerationNumber.Value())
@@ -2450,6 +2455,7 @@ func (xRefTable *XRefTable) insertBlankPages(parent *types.IndirectRef, pAttrs *
24502455
}
24512456
a = append(a, *indRef)
24522457
i++
2458+
xRefTable.SetValid(*indRef)
24532459
}
24542460
if before {
24552461
a = append(a, ir)

pkg/pdfcpu/nup.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,10 @@ func NUpFromOneImage(ctx *model.Context, fileName string, nup *model.NUp, pagesD
440440
return err
441441
}
442442

443+
if err := ctx.SetValid(*indRef); err != nil {
444+
return err
445+
}
446+
443447
if err = model.AppendPageTree(indRef, 1, pagesDict); err != nil {
444448
return err
445449
}
@@ -506,6 +510,10 @@ func wrapUpPage(ctx *model.Context, nup *model.NUp, d types.Dict, buf bytes.Buff
506510
return err
507511
}
508512

513+
if err := ctx.SetValid(*indRef); err != nil {
514+
return err
515+
}
516+
509517
if err = model.AppendPageTree(indRef, 1, pagesDict); err != nil {
510518
return err
511519
}

pkg/pdfcpu/types/dict.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,10 @@ func (d Dict) Size() *int {
371371
return d.IntEntry("Size")
372372
}
373373

374+
func (d Dict) IsPage() bool {
375+
return d.Type() != nil && *d.Type() == "Page"
376+
}
377+
374378
// IsObjStm returns true if given PDFDict is an object stream.
375379
func (d Dict) IsObjStm() bool {
376380
return d.Type() != nil && *d.Type() == "ObjStm"

pkg/pdfcpu/validate/page.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,6 +1013,9 @@ func processPagesKids(xRefTable *model.XRefTable, kids types.Array, objNr int, h
10131013
if err = validatePageDict(xRefTable, pageNodeDict, objNumber, hasResources, hasMediaBox); err != nil {
10141014
return nil, err
10151015
}
1016+
if err := xRefTable.SetValid(ir); err != nil {
1017+
return nil, err
1018+
}
10161019

10171020
default:
10181021
return nil, errors.Errorf("pdfcpu: validatePagesDict: Unexpected dict type: %s", dictType)

0 commit comments

Comments
 (0)