Return-Path: X-Original-To: apmail-pdfbox-users-archive@www.apache.org Delivered-To: apmail-pdfbox-users-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8D4F610E27 for ; Tue, 5 May 2015 15:56:25 +0000 (UTC) Received: (qmail 53766 invoked by uid 500); 5 May 2015 15:56:24 -0000 Delivered-To: apmail-pdfbox-users-archive@pdfbox.apache.org Received: (qmail 53749 invoked by uid 500); 5 May 2015 15:56:24 -0000 Mailing-List: contact users-help@pdfbox.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@pdfbox.apache.org Delivered-To: mailing list users@pdfbox.apache.org Received: (qmail 53372 invoked by uid 99); 5 May 2015 15:56:23 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 05 May 2015 15:56:23 +0000 X-ASF-Spam-Status: No, hits=2.2 required=5.0 tests=HTML_MESSAGE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: message received from 54.191.145.13 which is an MX secondary for users@pdfbox.apache.org) Received: from [54.191.145.13] (HELO mx1-us-west.apache.org) (54.191.145.13) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 05 May 2015 15:56:17 +0000 Received: from mail-qk0-f182.google.com (mail-qk0-f182.google.com [209.85.220.182]) by mx1-us-west.apache.org (ASF Mail Server at mx1-us-west.apache.org) with ESMTPS id DE7D624E38 for ; Tue, 5 May 2015 15:55:56 +0000 (UTC) Received: by qku63 with SMTP id 63so108627964qku.3 for ; Tue, 05 May 2015 08:55:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=8N8c7vV095QMn9vVyifl7C6JGckXgD9FP0HC7bW7/Mo=; b=pQzLP7gze8FXs67l8dFYpID93kkxkOAUG1AlN3ZI3nq7HKM6I4QYT1vuTAuFBMlTEp V3r8TbRWMNIMkLLp58oHyLbDR42reJmz8jGCz8tX05eHPlEm56R7n48o12rCKezvy3RT EcMOI2Bpj94PH96HCVTCLTmU2FD6glo5EaeBFdACdm0vRQ01tQig7ObNSw4IhLS55Ki5 75WWbO3zBT3HVekrBzLLUyC5BqB7PqLJcxTfgAeRg6Bcbewy7zacc2Jum6kDrtxgHI2J MscOgC3AsSVjNN4DNMXpg+6lr+x6MDXH7blzm8b3EYH9m5/Tkx/Qu9ohXHfzmRrLcq4v K6hQ== MIME-Version: 1.0 X-Received: by 10.55.21.17 with SMTP id f17mr57598547qkh.41.1430841356090; Tue, 05 May 2015 08:55:56 -0700 (PDT) Received: by 10.96.90.135 with HTTP; Tue, 5 May 2015 08:55:56 -0700 (PDT) In-Reply-To: <5543841C.1020701@t-online.de> References: <5541C55B.70908@t-online.de> <5543841C.1020701@t-online.de> Date: Tue, 5 May 2015 10:55:56 -0500 Message-ID: Subject: Re: Can't stamp newly created contents stream to Resources - XObjects From: Philip Poupart To: users@pdfbox.apache.org Content-Type: multipart/alternative; boundary=001a1147f248c28350051557b681 X-Virus-Checked: Checked by ClamAV on apache.org --001a1147f248c28350051557b681 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable I figured it out. I avoided creating a new resources Map. This was my biggest problem, because my new resource Map was incomplete. I just used the resources Map I extracted from the PDF, made my modification to the PDXObject, and put the new PDXObject back in. Also, this is by far the best experience I've ever had interacting with support/developers. Thanks for all your help, even though my description may have been a bit vague. On Fri, May 1, 2015 at 8:48 AM, Tilman Hausherr wrote: > Am 01.05.2015 um 15:07 schrieb Philip Poupart: > >> 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 xObjectMap; >> >> PDStream pdEmbeddedStream =3D new PDStream(pdf); >> OutputStream out =3D pdEmbeddedStream.createOutputStream(); >> out.write(contentBytesThatWereEmbeddedInXObject); >> out.close(); >> >> >> PDXObjectForm form =3D new PDXObjectForm(pdEmbeddedStream); >> PDXObject pdxObj =3D PDXObject.createXObject(form.getCOSObject()); <=E2= =80=94 This >> turns out to be null >> > > I looked at the 1.8 source... PDXObject.createXObject() expects a > COSStream which dictionary must have the subtype PDXObjectForm.SUB_TYPE. > But PDXObject.createXObject() then calls new PDXObjectForm() which you > already did... > > Why not just stay with the xform that you already have, store the stream > somewhere, alter it, and then with xform.createOutputStream() write back > into it, and then save your file with a new name? > > Btw, the null problem is because you have no COSDictionary. You started > with an empty dictionary when doing > > new PDStream(pdf); > > > An Xform looks like this in a PDF: > > 15 0 obj > << > /Name /Form1 > /Type /XObject > /Subtype /Form > /FormType 1 > /Matrix [0.001845 0 0 0.00198 0 0] > /Length 19 0 R > /Filter /FlateDecode > /BBox [0 0 542 505] > /Resources 13 0 R > >> > stream > ... > endstream > endobj > > > I hope this helps somewhat... if not, keep asking :-) > > > Tilman > > > >> 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 >> phil.poupart@gmail.com >> >> >> >> On Thu, Apr 30, 2015 at 1:02 AM, Tilman Hausherr >> wrote: >> >> Hi, >>> >>> I'd like to help, but to be honest, I haven't understood you. What do y= ou >>> mean with "stamping it back"? >>> >>> The usual way to write in a COSStream is like this: >>> >>> os =3D 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 /Xf= 1 >>>> 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 =3D "Xf1" ; >>>> >>>> Map trimMap =3D resources.getXObjects(); >>>> >>>> PDXObject xObjects =3D trimMap.get(xDict); >>>> >>>> PDStream nestedContentStream =3D xObjects.getPDStream(); >>>> >>>> >>>> >>>> ... modify nestedContentStream ... >>>> >>>> >>>> -----------stamp it back to resources (fails to create COSStream) >>>> >>>> >>>> byte[] modContentBytes =3D >>>> StringUtils.getBytesIso8859_1(newlyModifiedContentsStr); >>>> >>>> RandomAccessBuffer rab =3D new RandomAccessBuffer(); >>>> >>>> rab.write(modContentBytes, 0, modContentBytes.length); >>>> >>>> >>>> COSStream cosStream =3D new COSStream(rab); <------ cosStream length = is 0 >>>> even though rab is 218727 bytes >>>> >>>> >>>> PDXObject modifiedPdxObj =3D >>>> 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 >>>> phil.poupart@gmail.com >>>> >>>> >>>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org >>> For additional commands, e-mail: users-help@pdfbox.apache.org >>> >>> >>> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org > For additional commands, e-mail: users-help@pdfbox.apache.org > > --001a1147f248c28350051557b681--