Changeset 726
- Timestamp:
- 01/30/06 09:51:08 (3 years ago)
- Files:
-
- pypdf/trunk/pyPdf/pdf.py (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
pypdf/trunk/pyPdf/pdf.py
r723 r726 150 150 if value == None: 151 151 print objects, value, origvalue 152 if hasattr(value, "has_key") and value.has_key("__streamdata__"):152 if isinstance(value, StreamObject): 153 153 # a dictionary value is a stream. streams must be indirect 154 154 # objects, so we need to change this value. … … 159 159 for i in range(len(data)): 160 160 value = self._sweepIndirectReferences(externMap, data[i]) 161 if hasattr(value, "has_key") and value.has_key("__streamdata__"):161 if isinstance(value, StreamObject): 162 162 # an array value is a stream. streams must be indirect 163 163 # objects, so we need to change this value … … 275 275 assert objStm['/Type'] == '/ObjStm' 276 276 assert idx < objStm['/N'] 277 streamData = StringIO( filters.decodeStreamData(objStm))277 streamData = StringIO(objStm.getData()) 278 278 for i in range(objStm['/N']): 279 279 objnum = NumberObject.readFromStream(streamData) … … 375 375 assert xrefstream["/Type"] == "/XRef" 376 376 self.cacheIndirectObject(generation, idnum, xrefstream) 377 streamData = StringIO( filters.decodeStreamData(xrefstream))377 streamData = StringIO(xrefstream.getData()) 378 378 num, size = xrefstream.get("/Index", [0, xrefstream.get("/Size")]) 379 379 entrySizes = xrefstream.get("/W") … … 527 527 def _contentStreamRename(stream, rename): 528 528 if not rename: 529 if isinstance(stream, ArrayObject): 530 return stream 531 else: 532 return [stream] 529 return stream 533 530 stream = ContentStream(stream) 534 newdata = StringIO()535 for operands,operator in stream.operations:536 for op in operands:531 for operands,operator in stream.operands: 532 for i in range(len(operands)): 533 op = oprands[i] 537 534 if isinstance(op, NameObject): 538 op = rename.get(op, op) 539 op.writeToStream(newdata) 540 newdata.write(" ") 541 newdata.write(operator) 542 newdata.write("\n") 543 retval = DictionaryObject() 544 retval["__streamdata__"] = newdata.getvalue() 545 retval[NameObject('/Length')] = NumberObject(len(retval["__streamdata__"])) 546 return [retval] 535 operands[i] = rename.get(op, op) 536 return stream 547 537 _contentStreamRename = staticmethod(_contentStreamRename) 538 539 def _pushPopGS(contents): 540 # adds a graphics state "push" and "pop" to the beginning and end 541 # of a content stream. This isolates it from changes such as 542 # transformation matricies. 543 stream = ContentStream(contents) 544 stream.operations.insert(0, [[], "q"]) 545 stream.operations.append([[], "Q"]) 546 return stream 547 _pushPopGS = staticmethod(_pushPopGS) 548 548 549 549 def mergePage(self, page2): … … 581 581 582 582 originalContent = self["/Contents"].getObject() 583 if isinstance(originalContent, ArrayObject): 584 newContentArray.extend(originalContent) 585 else: 586 newContentArray.append(originalContent) 583 newContentArray.append(PageObject._pushPopGS(originalContent)) 587 584 588 585 page2Content = page2['/Contents'].getObject() 589 newContentArray.extend(PageObject._contentStreamRename(page2Content, rename)) 590 591 self[NameObject('/Contents')] = newContentArray 586 page2Content = PageObject._contentStreamRename(page2Content, rename) 587 page2Content = PageObject._pushPopGS(page2Content) 588 newContentArray.append(page2Content) 589 590 self[NameObject('/Contents')] = ContentStream(newContentArray) 592 591 self[NameObject('/Resources')] = newResources 593 592 … … 630 629 631 630 632 class ContentStream(D ictionaryObject):631 class ContentStream(DecodedStreamObject): 633 632 def __init__(self, stream): 634 633 self.operations = [] 635 self.__parseContentStream(stream) 636 637 def __parseContentStream(self, stream): 638 # stream may be an array of streams to concatenate. 634 # stream may be a StreamObject or an ArrayObject containing 635 # multiple StreamObjects to be cat'd together. 639 636 stream = stream.getObject() 640 637 if isinstance(stream, ArrayObject): 641 638 data = "" 642 639 for s in stream: 643 data += filters.decodeStreamData(s.getObject())640 data += s.getObject().getData() 644 641 stream = StringIO(data) 645 642 else: 646 stream = StringIO(filters.decodeStreamData(stream)) 643 stream = StringIO(stream.getData()) 644 self.__parseContentStream(stream) 645 646 def __parseContentStream(self, stream): 647 647 operands = [] 648 648 while True: … … 658 658 operands.append(readObject(stream, None)) 659 659 660 def _getData(self): 661 newdata = StringIO() 662 for operands,operator in self.operations: 663 for op in operands: 664 op.writeToStream(newdata) 665 newdata.write(" ") 666 newdata.write(operator) 667 newdata.write("\n") 668 return newdata.getvalue() 669 670 def _setData(self, value): 671 self.__parseContentStream(StringIO(value)) 672 673 _data = property(_getData, _setData) 674 660 675 661 676 def convertToInt(d, size): … … 676 691 output = PdfFileWriter() 677 692 678 input1 = PdfFileReader(file(" ..\\test\\5000-s1-05e.pdf", "rb"))693 input1 = PdfFileReader(file("test\\5000-s1-05e.pdf", "rb")) 679 694 page1 = input1.getPage(0) 680 695 681 input2 = PdfFileReader(file(" ..\\test\\PDFReference16.pdf", "rb"))696 input2 = PdfFileReader(file("test\\PDFReference16.pdf", "rb")) 682 697 page2 = input2.getPage(0) 683 698 page3 = input2.getPage(1) … … 685 700 page1.mergePage(page3) 686 701 687 input3 = PdfFileReader(file(" ..\\test\\cc-cc.pdf", "rb"))702 input3 = PdfFileReader(file("test\\cc-cc.pdf", "rb")) 688 703 page1.mergePage(input3.getPage(0)) 689 704 690 705 output.addPage(page1) 691 output.write(file("test .pdf", "wb"))692 693 706 output.write(file("test\\merge-test.pdf", "wb")) 707 708
