gpt4 book ai didi

java - 使用itext库在pdf文档中添加内联图像

转载 作者:行者123 更新时间:2023-12-02 09:27:39 25 4
gpt4 key购买 nike

我们创建了一个使用itext 5库生成pdf文档的应用程序。作为pdf生成的一部分,我们试图将图像内嵌在pdf中,该图像应不可编辑且只读。我们尝试使用PdfContentByte的addImage方法,如下所示,

byte[] decoded = Base64.getDecoder().decode(encodedImage);
image = Image.getInstance(decoded);


检索此图像后,在addImage方法中使用相同的图像。

PdfContentByte canvas =  pdfStamper.getOverContent(item.getPage(0));
canvas.addImage(image, Boolean.TRUE);


结果:由于该图像为Base 64字符串格式,因此该图像不会显示在生成的pdf文档中(如果该图像不是Base 64格式,则可以正常工作)。

当我们打开pdf时,显示以下错误:------->“此页面上存在错误。Acrobat可能无法正确显示该页面。请与创建PDF文档的人联系以更正此问题。 ”

我们如何处理这种情况?

是否有其他方法可以达到此要求。请帮忙

代码:-

PdfReader resultantPdfReader = new PdfReader("template.pdf");

PdfStamper resultandPdfStamper = new PdfStamper(resultantPdfReader, new FileOutputStream("A13.pdf"));

AcroFields acroFields = resultantPdfReader.getAcroFields();
Rectangle fieldPosRec = acroFields.getFieldPositions("imageField").get(0).position;

String encodedSignature = "";
encodedSignature = new String(Files.readAllBytes(Paths.get("MyImage.png")));

if(encodedSignature.indexOf("data:image/png;base64,") != -1) {
encodedSignature = encodedSignature.substring("data:image/png;base64,".length());
}

Image image = null;
try {
byte[] decoded = Base64.getDecoder().decode(encodedSignature);
image = Image.getInstance(decoded);
} catch (Exception e) {
e.printStackTrace();
}
image.scaleAbsoluteHeight(fieldPosRec.getHeight());
image.scaleAbsoluteWidth(fieldPosRec.getWidth());
image.scaleToFit(fieldPosRec);
acroFields.removeField("imageField");
image.setAbsolutePosition(fieldPosRec.getLeft(), fieldPosRec.getBottom());
PdfContentByte canvas = resultandPdfStamper.getOverContent(item.getPage(0));
canvas.addImage(image, Boolean.TRUE);
resultandPdfStamper.close();
resultantPdfReader.close();


BASE64图像串:iVBORw0KGgoAAAANSUhEUgAAAU4AAACWCAYAAACxSWGfAAAAAXNSR0IArs4c6QAAFJFJREFUeAHtnQmwZFV9hw37DgoiaJgZsGBAFgkSIEJgjAZRAliFikrEoOgoGkQlEFJKiXFhr5RCAKMjJhBETAoRImjAB4KAKBgEDBBhQM2IyEDYh2XM90Gf8k7T3a / fe9093X1 // 6rv3XOXvsvX9 / 773HNP93vBCxIxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAMxEAPNBl7MhEObJ2Y8BmIgBmKgtYG9mTwBv2vAIBEDMRADMdDKwCuYeCmUhFmGrZbNtBiIgRhoa2AN5uwDZ8L3oCST6Q6vYR3nwnyYC8MQ67MTp8JT4HEthsMbZccTMRADMTCpgU1Z4kPwbXgCppsku3ndIta / vBLpymz7w2CidF9NnCZQE6lR9v + 5sfyNgRiIgYqBlSjvASfALVAShsNn4Br4OPwRzDSsZc4Hk + UiqG7LstOcNx / mQj9iM1Z6LFwNZfveonurXmJVCmVemZZhDMRAzQ1swPG / E74GD0BJEg4dPw8OAp8u9zNMjibJc2ERVPfDstOcNx / mwnRjLV54MFwBS6Fsx3X7MKg5jmeCyxzXPCPjnQ38QefZmRsDI2dge / bYJCE7wwpQ4mcULm5wFcOny4wBD02O8yps1LR9b6sfhvsa / GaS8k7M / yvYH9YE41H4NzgLJs AEWQ3dWBs1Xg0 / fLaUPzEQA7UysAdH + 2UotSyHtl1eAn8Nm8Kwhol0PlgzvA6qxzCVsrVMa5sHg7XPdrEqM24F153aZjtLHaanxtlBTmaNhAFvs0 + EdzX29iaGJp + L4DKw5jVqYa1xQ / DYpF3ZeS77A / gJfBXuhMnCW / QjwRq4bbpLIBEDMVADA37ovwfuB2tOj8MnYBVItDfgLbpNFLJT + 8UyJwZiYNwMbM0BfR / KbaxPi18 + bgfZ4 + PXG + bNcCPkFr3HcrO63hlYl1VtA3vBe + FYsA3uO3Ar / Aouh9PhjbAaJDobWIPZn4MnwYt / EbwNEp0NvI7Z10P5oDmasu2ciRgYGgOvYk9OgnKSdju0Le6bcAhsDIllDezN6F2gz2fgNPDDKdHewI7M + i6Uc9AP6 / eBfVoTMTAUBjwZj4HylTbb3qxZWsNcANY4rXlaA7Um6kW / A / gaawNLoZzglp3mvF50yGY1IxsvY8 + / AcXNDZT / eGSPZjA7vgWb + TqUc + oBykfB6pCIgaExsCV7Yj84L25P1lNgqrfe1jJNrNY6rX2WROHwHNgX6hQrcrAfhodABw79brXTE60NvJTJZ0L58H6M8nHwQkjEwNAYsMH9MPAE9eJeCPNgpmHS9db0DLCGVZLoBGVvv8Y9rFFWj9uO3NY8E60NmBhNkOU8NHGaQE2kiRgYKgObsDeXQUlqCyiv04c9tAngQ3AfuC1rtGfDLBi3sPniVLAN02O9C / wASbQ24K23t + CLoZwb3qJ7q56IgaEzcBB79CB4st4L + 0K / w6RireJxcLsOfcLcj2TNagceB7DF / wWPzafmHqtP0RPPN + CHqQ95fNijL / ku1OFuhMNMjJqBF7PD / w7lZLXstEHGbDZmm6c1T / fDmugHwYtpFMP + l5dCcXoVZR + eJZY1YLPQLnAyXAfF1 / WUXweJGBhKA9YqrV16wlrbtNa5PMPaxRVQLqD / przf8tyhKW57FZb3Z9xKDdpeCIeACS LxnIFqsrybSeW9dngevAXiCwmJ4TPgrfACKCet7Zq2bw5LmCxvg7J / E5SH / ZZtJ / bRC7 / s81cpD7rmziaHMjoly3vY41PAmmcS5lC + fdkpDcyDheAF7hPLw2AYT1hv00fhAZLfVrHt0u9J6 / QCmAd1jyTLup8BY3L8q3EcfrKXdkT7aM4dgWNr9QDJRGWteXmHtcxbwYRp4jweTKR1jSTLur7zY3rca3FcJ4IXuP3hjgFrdKMUs9jZYXmA1FzLNHnuPEoye7iv1WTpbbfnWCG34T0UnVUN3sD5jZN5gqHfOx / laH6AdCUHczRsNKCDSi3zuaad8jQ8yXJAJ142M1gDR7I5awA + Nd98sJvu69Z8gGTH6FK7sSbtt3H2hH602da1lrk6Pv2wejf8A1wOd0Dx7tDkaZeiPOBBQmL0DbyWQ7DtzXbNfUf / cJ53BCbI14MJ08RZLuY7KfeyFlqHWqYuNwU / kD4B3qXYs6F846m4LUMTaJIlEhLjZWAWh3MfeKJ / arwOreXReKv + d2DSLBf3TGuh41rL9MHarvABOB2uhvLDI8VdGfqNp5 + C7ctHwRvgZZCIgbEz4BP068GT / z9gBahLdKqFmli7bQsdh1qmv7o0F + XU / vfgr1TdBSUpNg / 9euglcCK8E14JdupPxEAtDHyZo /硅+ DNU + ee3plMLHdVa5ga8138Gh8MC + BE8Bs3J0XG / 2eR8l3N5X + frEzFQWwPv58i9OB6F7WprYdkDb1cLbZVUyrRh7ZdpDdD39S / hBLCGaE2x7HfzcCHzLoRPw1thS7AmmoiBGGgY2IXhEvDieUdjWgbLGii1UB8oNSeZMm5H9mHol2lb4l5wJJwNN4FtjmU / q0PbKG2rtM3yUNgNbMtMxEBXBqxd1DFewkH / GLzY7DbyEUiMhgFrkVuBbYoF30drh82xlAn / AybRKgsZN5EmYmBaBuqYOP0W0GWwO1wJpRu​​SyxB HVBHkL47ZdJmKgpwZG7auEvTj4k1iJSfNXYDuW7XOJ5WvA83ALqCZIyxu32C1rkfaZ / K8mftli2UyKgb4YqFuN07ZM + 9jZ9rUHXAuJwRqw50JzLXIbpvmEvjlsi7QGWU2SNzOeWmSzqYwP1ECdapxerP / UsHsYwyTN / p5q9od9OTTXIme12KztjXdCNUFaXghpi0RCYrgM1KXGaS3HvnibwQJ4DyR6Z2BtVrUtVJOk42u22IS1Rb9dU02S1iofbrFsJsXAUBqoQ + K05nMR + PU3k6ddT + yGlJiegTm8rJogLfuB1Opc + gXTqwnSsk + 5badMxMDIGqjDrfoneXdMmr + F / SFJEwldxOosY9tjNUna3LFui9fq1CfYzUnygRbLZlIMjLyBVrWEkT + oygHsS / kCsIazJ1wOiecbsB9kNUFa9im3tfXm + DUTmhOkT7nTO6HZVMZjYAQNeOE / CD5c + JsR3P9 + 77Lft9bLhaCjZux5YNvjv8AR8OewISRiIAbG1IA16c + DycAf8E383sCrKf4zPAElWfoDJ34p4BR4F2wPq0AiBmKgRgZ251hNCn6tcq0aHXe7Q9XB ++ AnUJLlM5R9aPZGaHVLzuREDMRAnQycycGaID5Tp4NucaxbM + 0L8H9QEua9lD8LsyERAzEQA88a8BZzMZgoXvHslHr9WZnDPQCugJIsHX4f3g65BUdCIgZiYFkDb2LURHHjspPHfmwWR2gN26feJWE + RPk0sFtRIgZiIAbaGjifOSaOj7VdYnxm2Da5F / hk3DbLkjDtLvR + SPsuEhIxEAOdDazL7MfBJGLfxHENuxIdCT + Hkix9Sn427AqJGIiBGOjawLtZ0kRyWdevGK0F7Upkv8pqV6I7GT8KTKaJGIiBGJiyAROmifPgKb9yeF / g7fZ8aO5K9C2mpSvR8L5v2bMYGAkD3pp7i + 6t + jojscedd9KuRKdCuhJ19pS5MRADMzBwBK + 1tjnK3xSyq9DboLkr0ZVMS1 ciJCRiIAZ6a6Dcyu7X29UOZG2z2YpdieycbvKX0pXImmciBmIgBnpuwORisrkfRqWDt12J / Lm7Vl2JbNNMVyIkJGIgBvpn4LOs2sR5Rv820dM1b8La / EGNUrssXYl8ap6IgRiIgYEYuIitmIT + dCBbm9lGtuPl / kdG9 / eHYH / MdCVCQiIGYmCwBi5hcyaiXQa72Slv7bW8ojwln6C83pTXkBfMxIA / N + g5cjJ4ziRioNYGvBBMnA6HNQ5kx5aA + / k1aPXvcJmc6LGBarK8m3Xrv7BVj7eV1cXASBmwFuHFcA94oQxb + M2epeA + ngTDuI / s1thEp2TpOWL7sudM3oexectzINMx4AXgBWFi8oIYlvDJub9O5H7ZOf8wSPTHQDVZlnNB75Jk2R / nWesYGBi22 / XVcXoBeOH6bSb / w2aitwaSLHvrM2uroYFyu / 4bjv1zsM1ydOBT8mvApHk / 5BeLkNCDMFH6vn4QzoPypYdqzdIP0NyGIyERA90Y8KLaB8pF5PAm + FuYDYOKzdjQ7eD274ItITE9AyvyslfBR8Haux9Ceq0ywXiSJRISMTBdAyZP + 3KeDr + FcoH5YMZ / HfEB6GefyR1Z / 73gdm + AjSDRvQG / 9eWXAI6Gb4NfOy3vYRnezTR /吴+ 9MBcSMRADPTTg / 975℃/ hXeBTKhfcU5YvgHbAm9Cr8ibdHwO1cAmtBorMB24FfA5 +安永+ ExKO9TGd7BtC / BQTAHEjEQAwMyYIK0H + XFYOIsF6WJ7hzYG0y0041DeOHT4Hq / AitB4vkG1mGS / + rDNuir4Uko74VD7wxuBnsiHAAbQyIGYmAIDGzAPhwKV4EXarlwvbX / R9gNvOXvNo5lwbKOT3X7opostz7H6a9V2W / yR1A + XIovx3 / cmP8mhi6fiIGhNzCVBDH0BzONHZzNa7xll20qr19E + T5Y2IYHmG6t8otwMNhH03 + O9iWoc1hDtI15D9gdtobqOWZt3wR6BVwJ1jptx0zEwE gZqJ7UI7XjfdjZbVmnCXQH2HOS9Xux625tMBmcBT7MWNjAxFqH8IPHBFkS5eZNB / 0449dBSZTXUrYdMxEDI20gibP12 / ciJs / pgAmzU5hYF3ZgVBPrFhxTNVHOYrwaDzPyAyiJ8nrKT1YXSDkGxsFAEufU3kX7ZFqznAN + je848MnwnArWwnwI0ikmS6zOXxVWaQy7LXe7XLv1dnq9TRPOr8ZiRmwrLonyRso2WyRiYKwNJHF2 // buyqIXwovAW859wAdKrcJl5rShm8Taap3DMM3fD70bSqL0CfjvhmHHsg8xMEgDSZzd2d6fxc6G1eCb8Haw / W660SmxrstK7ThvzW1JA293S9lhdXyq5Zm83vbcRAzEQAxMauAwljCJWbOyf + EKkIiBGIiBGGhhwNr4iWDCXAp + 5z0RAzEQAzHQxoAPT84Fk6a3wgdCIgZiIAZioI2B9Zg + ASZN / Z + Q / ycoEQMxEAMx0MaAXYu + ACbNX8J2kIiBGIiBGOhgwO + qmzS / A5t0WC6zYiAGYiAGMGC / TJPmE / BKSMRADMRADHQwYL9Jf9TDxHl4h + UyKwZiIAZiAAN2O7oUTJoO86UAJCRiIAZioJOBjzLTpOk / ebPmmYiBGIiBGOhgwLZM2zRNnLZxJmIgBmIgBjoYsOvRLWDS9KuUiRiIgRiIgUkMlK5HJk + TaCIGYiAGYqCDgXQ96iAns2IgBmKg2UC6HjUbyXgMxEAMdDCQrkcd5GRWDMRADLQy8BEmputRKzOZFgMxEAMtDKTrUQspmRQDMRAD7Qyk61E7M5keAzEQA20MpOtRGzGZHAMxEAOtDKTrUSsrmRYDMRADbQxUux75YCgRA3U2sBMHf1ydBeTYJzeQrkeTO8oS9TCwKodpwnwa8rsM9XjPp32U6Xo0bXV54RgZsJZ5K5gwTZzHg4k0MQMD4 / rbk3Y9ug48QfaFb0FitAz4n0bXqrB2pTzZ9FbLei74z / FE / yf1i6Zhmeb8cQiP91 g4AlaEn8HB4HWRmKGBlWb4 + mF8uR8G88ETx6fpSZpI6HN0k + RaJTMTYKvpTlu5D / u8Jut8KWzVYd2PMK9dUh325DqXfZ / XYHuGW8IzcAIcA0sg0QMD41jj3AUv18CNsCs8DompG / BDdUPwAVth40q5TDPJvQR6HU + xQpPYw42h5UKrad0suwbr + MMG / JM + y81Dk / lk4baGJblamzwQ9oa3QjXOYOQsSC2zaqUH5XGscb6l4eV7DJM0n3 + SvJBJJek1D6uJcQOW6 / aD9VGWfRJaJbRupzUnPtfX63CdD8LNHVa8LvOak2nzuMnVWmunmut / Mv8mOB9MXLYx9ipKspzHCr39LuFPJP4UJhrcxjDRBwPdXhh92HRfVunx3A2e6H8C10IdYjUO0lpfNfE1J8UybhNGN / EMC / kP7H7dhkWV6Q9RrlN0Sq7WYtcHa + sl7qHwDZhpEi0J05qlNcwSX6EwAeeA71uizwbGLXHugi9v072Nmg29 / JRndQONFdiatb6S8By2S4zrTWHPTHImw2ria5Uc / R9MS6ew3iz6ewNeVzuDCe7N4Ad5Cc9NE + hUkmhJmB / ndZs3VnQxw69DkmVDyCAH45Y4T0ae / 3ztFPjYIEVOYVu2CVaTYbVcTYzWWLxguglvQe + FagJslxjTfNGN0d4tM90kOpddmNdgW4Zbg3EHfBqSMLWxnGLcEucleHw9nAufh + th1SZ8Atw8rTrez / m2KbutbsLa8v1QTYbV8qLKvMXdrDDLLHcDJYnaDi / VmuhpjN8FO8IWsANUw9qltcwkzKqV5VQet8RpY / 2ty8llt5v1FvgRqCa + akIsZWuQPllOjKeBuRzWfPB23vbp5ge1NzDtdphocBvDxJAYGLfEWf1E99bmNfA0LAFvZx22Y1Dzkwx5E2oYJsp5sB / sBjbZNMdFTJAJSKJEQiIGYqC + Bmx2aYVPwK1VngTbQSIGYiAGYqBhoJo0TZQ + Ud8f1mnMzyAGYiAGYiAGYi AGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiAGYiGYiAGYiAGYiAGYiAGRs3A / wMpp3D77pc5JQAAAABJRU5

最佳答案

您的示例图像具有iText无法正确转换为嵌入式图像的属性。不幸的是,它无法识别并输出错误的结果PDF。

特别是您的图像文件使用透明度。内联图像不允许使用Mask或SMask条目(PDF中的图像用来表示透明度)。因此,您的图像不能用作嵌入式图像。

结果,由iText创建的嵌入式图像仅由黑色矩形组成,而透明度信息(包含线条图)被删除。

此外,您的图像使用校准的RGB颜色空间。此类已校准的RGB颜色空间本身无法内联,因此必须将颜色空间定义放入页面资源中。但是,iText在创建内联图像时无法正确引用该非内联部分。

结果,由iText创建的嵌入式图像以错误的名称引用了色彩空间,从而导致Adobe Reader出现“此页面上存在错误”错误消息。修复该参考对象将获得有效结果PDF,该结果显示上述黑色矩形。



在评论中,您说明您的实际目标是防止从生成的pdf文档中复制图像。

通常,这显然是不可能的-PDF查看器可以访问的在屏幕或纸张上绘制的任何信息,也可以由设计用于该任务的PDF处理器访问,以复制到某些文件。 (让我们在这里忽略专有的,特定于查看器的DRM扩展。)

但是,您可以尝试以一种常见的PDF查看器不提供复制数据的方式来绘制数据。像您一样尝试使用内联图像是该方向的一种方法。其他方法将图像包装在其他结构中,例如以一种模式:

PdfContentByte canvas = resultandPdfStamper.getOverContent(1);
Rectangle pageSize = resultantPdfReader.getPageSize(1);
PdfPatternPainter painter = canvas.createPattern(pageSize.getWidth(), pageSize.getHeight());
painter.addImage(image);
canvas.setColorFill(new PatternColor(painter));
canvas.rectangle(0, 0, pageSize.getWidth(), pageSize.getHeight());
canvas.fill();


AddImageInPattern测试 testAddToPageTest3

Adobe Acrobat Reader此处不提供复制该图像的功能。另外,我的(公认较旧的)Adobe Acrobat Pro不提供复制它的功能,仅是将其删除(更确切地说,是删除填充有图案的整个矩形)。

但是要注意,普通的PDF查看器提供或不提供的是一个移动的目标...

关于java - 使用itext库在pdf文档中添加内联图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58224394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com