| | 498 | def __mergeResources(res1, res2, resource): |
|---|
| | 499 | newRes = DictionaryObject() |
|---|
| | 500 | newRes.update(res1.get(resource, DictionaryObject()).getObject()) |
|---|
| | 501 | page2Res = res2.get(resource, DictionaryObject()).getObject() |
|---|
| | 502 | renameRes = {} |
|---|
| | 503 | for key in page2Res.keys(): |
|---|
| | 504 | if newRes.has_key(key) and newRes[key] != page2Res[key]: |
|---|
| | 505 | newname = NameObject(key + "_renamed") |
|---|
| | 506 | renameRes[key] = newname |
|---|
| | 507 | newRes[newname] = page2Res[key] |
|---|
| | 508 | elif not newRes.has_key(key): |
|---|
| | 509 | newRes[key] = page2Res[key] |
|---|
| | 510 | return newRes, renameRes |
|---|
| | 511 | __mergeResources = staticmethod(__mergeResources) |
|---|
| | 512 | |
|---|
| | 513 | def mergePage(self, page2): |
|---|
| | 514 | """ |
|---|
| | 515 | Merges the content streams of two pages into one. |
|---|
| | 516 | |
|---|
| | 517 | Stability: Added in v1.4, will exist for all v1.x releases thereafter. |
|---|
| | 518 | """ |
|---|
| | 519 | newContentArray = ArrayObject() |
|---|
| | 520 | |
|---|
| | 521 | originalContent = self["/Contents"].getObject() |
|---|
| | 522 | if isinstance(originalContent, ArrayObject): |
|---|
| | 523 | newContentArray.extend(originalContent) |
|---|
| | 524 | else: |
|---|
| | 525 | newContentArray.append(originalContent) |
|---|
| | 526 | |
|---|
| | 527 | page2Content = page2['/Contents'].getObject() |
|---|
| | 528 | if isinstance(page2Content, ArrayObject): |
|---|
| | 529 | newContentArray.extend(page2Content) |
|---|
| | 530 | else: |
|---|
| | 531 | newContentArray.append(page2Content) |
|---|
| | 532 | |
|---|
| | 533 | newResources = DictionaryObject() |
|---|
| | 534 | |
|---|
| | 535 | originalResources = self["/Resources"].getObject() |
|---|
| | 536 | page2Resources = page2["/Resources"].getObject() |
|---|
| | 537 | |
|---|
| | 538 | newFonts, renameFonts = PageObject.__mergeResources(originalResources, page2Resources, "/Font") |
|---|
| | 539 | newResources[NameObject("/Font")] = newFonts |
|---|
| | 540 | newGS, renameGS = PageObject.__mergeResources(originalResources, page2Resources, "/ExtGState") |
|---|
| | 541 | newResources[NameObject("/ExtGState")] = newGS |
|---|
| | 542 | |
|---|
| | 543 | newResources[NameObject("/ProcSet")] = ArrayObject( |
|---|
| | 544 | ImmutableSet(originalResources.get("/ProcSet", ArrayObject()).getObject()).union( |
|---|
| | 545 | ImmutableSet(page2Resources.get("/ProcSet", ArrayObject()).getObject()) |
|---|
| | 546 | ) |
|---|
| | 547 | ) |
|---|
| | 548 | |
|---|
| | 549 | self[NameObject('/Contents')] = newContentArray |
|---|
| | 550 | self[NameObject('/Resources')] = newResources |
|---|
| | 551 | |
|---|
| 569 | | #input1 = PdfFileReader(file("input1.pdf", "rb")) |
|---|
| 570 | | #output.addPage(input1.getPage(0)) |
|---|
| 571 | | |
|---|
| 572 | | input2 = PdfFileReader(file("..\\test\\5000-s1-05e.pdf", "rb")) |
|---|
| 573 | | page = input2.getPage(1) |
|---|
| 574 | | page.cropBox.upperRight = (200, 200) |
|---|
| 575 | | print repr(page.cropBox) |
|---|
| 576 | | page.cropBox = RectangleObject((20, 20, 40, 40)) |
|---|
| 577 | | print repr(page.cropBox) |
|---|
| 578 | | del page.cropBox |
|---|
| 579 | | print repr(page.cropBox) |
|---|
| 580 | | #contents = input2.getObject(page["/Contents"]) |
|---|
| 581 | | #contentStream = ContentStream(contents) |
|---|
| 582 | | #for operands,operator in contentStream.operations: |
|---|
| 583 | | # for operand in operands: |
|---|
| 584 | | # if isinstance(operand, NameObject): |
|---|
| 585 | | # print "name object" |
|---|
| 586 | | |
|---|
| 587 | | output.addPage(page) |
|---|
| | 629 | input1 = PdfFileReader(file("..\\test\\PDFReference16.pdf", "rb")) |
|---|
| | 630 | page1 = input1.getPage(0) |
|---|
| | 631 | page2 = input1.getPage(1) |
|---|
| | 632 | page3 = input1.getPage(2) |
|---|
| | 633 | page1.mergePage(page2) |
|---|
| | 634 | page1.mergePage(page3) |
|---|
| | 635 | output.addPage(page1) |
|---|
| | 636 | |
|---|