Hi, I'm using version 1.8.9. The original PDF has a content stream like this:
q Q q q 1 0 0 1 0 0 cm /Xf1 Do Q Q q BT 36 1125 Td ET Q /Xf1 is a reference to a longer content stream stored in Resources / XObject. This content stream in the XObject looks normal: q Q q 1 i 1089.013 1143.523 -1215.499 -982.486 re -126.486 1143.523 m W n 180 180 m 783 180 -603 801 re 180 180 m W n 963 1161 -963 -1161 re 0 1161 m W n 0 1161.015 963 -1161 re W n /GS1 gs q 603.597 0 0 801.561 179.707 179.69 cm /Im1 Do .... etc I get this longer stream out, edit it and am trying to put it back in place. Map<String,PDXObject> xObjectMap; PDStream pdEmbeddedStream = new PDStream(pdf); OutputStream out = pdEmbeddedStream.createOutputStream(); out.write(contentBytesThatWereEmbeddedInXObject); out.close(); PDXObjectForm form = new PDXObjectForm(pdEmbeddedStream); PDXObject pdxObj = PDXObject.createXObject(form.getCOSObject()); <— This turns out to be null xObjectMap.put(trimmedXDict, pdxObj); resources.setXObjects(xObjectMap); ; I have a COSStream or PDStream, but am trying to make it a PDXObject so I can store it back in the xObjectMap (which requires a PDXObject). Hope this makes sense. It is a complex project. Thanks for any help. Phil Poupart [email protected] On Thu, Apr 30, 2015 at 1:02 AM, Tilman Hausherr <[email protected]> wrote: > Hi, > > I'd like to help, but to be honest, I haven't understood you. What do you > mean with "stamping it back"? > > The usual way to write in a COSStream is like this: > > os = cosStream.createUnfilteredStream(); > > os.write(....) > os.close() > > > > If you need more help, mention what version you are using. The official > one is 1.8.9. > > Tilman > > > Am 29.04.2015 um 16:52 schrieb Philip Poupart: > >> I'm wondering if anyone can point me in the right direction here. I have a >> series of PDFs that have short content streams that just reference /Xf1 in >> the PDF body. These were PDFs modified with iText. It is essentially a PDF >> placed on a page of a PDF. >> >> I'm extracting the nested contents stream just fine. I can modify that >> contents stream, but am having difficulty stamping it back to the >> Resources->XObjects dictionary. >> >> >> >> Original content stream is a reference to /Xf1 object in pdf body. >> >> 1 0 0 1 0 0 cm /Xf1 Do Q >> >> >> Below are some snippets of my code. >> >> >> -----------get the nested content stream (this works) >> >> String xDict = "Xf1" ; >> >> Map<String,PDXObject> trimMap = resources.getXObjects(); >> >> PDXObject xObjects = trimMap.get(xDict); >> >> PDStream nestedContentStream = xObjects.getPDStream(); >> >> >> >> ... modify nestedContentStream ... >> >> >> -----------stamp it back to resources (fails to create COSStream) >> >> >> byte[] modContentBytes = >> StringUtils.getBytesIso8859_1(newlyModifiedContentsStr); >> >> RandomAccessBuffer rab = new RandomAccessBuffer(); >> >> rab.write(modContentBytes, 0, modContentBytes.length); >> >> >> COSStream cosStream = new COSStream(rab); <------ cosStream length is 0 >> even though rab is 218727 bytes >> >> >> PDXObject modifiedPdxObj = >> PDXObject.createXObject(cosStream.getCOSObject()); >> >> trimMap.put(trimmedXDict, modifiedPdxObj); >> >> resources.setXObjects(trimMap); <------ this blows up because my COSStream >> length is 0 (I think) >> >> >> Any help would be appreciated. Thanks, >> >> Phil Poupart >> [email protected] >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >

