小编Jor*_*ens的帖子

来自itext的jasper-reports中的依赖性错误

从昨天开始,由于iText jar,我在使用maven进行编译时遇到了问题.我的项目依赖于jasperreports-2.0.1,它依赖于itext-1.02b或更高版本.

<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>[1.02b,)</version>
    <scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这是maven中的日志错误:

Failed to collect dependencies for [jasperreports:jasperreports:jar:2.0.1 (compile)]: Failed to read artifact descriptor for com.lowagie:itext:jar:4.2.2: Could not transfer artifact com.itextpdf:itextpdf:pom:4.2.2 from/to jaspersoft (http://www.jasperforge.org/maven2): Access denied to http://www.jasperforge.org/maven2/com/itextpdf/itextpdf/4.2.2/itextpdf-4.2.2.pom. Error code 403, Forbidden -> [Help 1] 
Run Code Online (Sandbox Code Playgroud)

在这里看到Amedee Van Gasse发表的评论,该评论说明了一个没有jar的4.2.2版本.

为什么1.02b版本附加到4.2.2?

编辑:Jasper-reports使用开放版本范围:

[1.02b)

这个范围说maven采取图书馆最新版本.

随着iText 的更新添加新版Pom没有jar并编辑maven-central的maven-metadata到no-jar版本根据最新的com.lowagie库将编译崩溃到所有jar.

在本地更新您的maven-metadata-central.xml(以及其他元数据,如果您的公司拥有它自己的nexus.public)从... m2\repository\com\lowagie\itext到那个工作.暂时解决方案直到iText更新元数据或所有依赖于它的最新版本公司更新它的pomcom

<metadata modelVersion="1.1.0">
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <versioning>
    <latest>4.2.1</latest>
    <release>4.2.1</release>
    <versions>
      <version>0.99</version>
      <version>1.1.4</version>
      <version>1.02b</version>
      <version>1.2.3</version>
      <version>1.3</version>
      <version>1.3.1</version>
      <version>1.4</version>
      <version>1.4.8</version>
      <version>2.0.1</version>
      <version>2.0.6</version>
      <version>2.0.7</version>
      <version>2.0.8</version>
      <version>2.1.0</version>
      <version>2.1.2</version>
      <version>2.1.3</version> …
Run Code Online (Sandbox Code Playgroud)

dependencies jar jasper-reports itext maven

15
推荐指数
8
解决办法
3万
查看次数

带有Unicode字符的PDF表单

我目前正在努力处理从LibreOffice文档创建的PDF表单.

我按照"iText in Action"一书中的建议创建了它,现在我试图用一些可以包含Unicode字符的值预先填充嵌入的表单.

这包括一个由base char组成的字符,另外还有一个char(eG M)组合.

我在stackoverflow 和本书中尝试了几个不同的提示 ,但是我从来没有得到一个可以在所有平台上运行的表单的PDF文档:Linux(Okular,Evince,Acrobat DC,macOS Previewer等)

我知道我需要一个字体,覆盖字符并完全嵌入字体.下面是我用来存档PDF文档和PDF文件的代码.

我的问题是:

  • PDF规范的不同行为是PDF规范中的弱点,我不得不忍受它吗?
  • 特别是Linux PDF阅读器和Acrobat表现得很糟糕.有没有已知的错误?
  • 我对PDF的内部不是很熟悉,所以有什么建议吗?我的PDF文件的内容是否正常?
  • 有关如何改进代码以获得更好结果的任何建议?

填写表格的代码:

BaseFont uniFont = BaseFont.createFont("./src/main/resources/UnicodeDoc.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, false, null, null, false);
uniFont.setSubset(false);

// Debugging code...
for (String codepage : uniFont.getCodePagesSupported()) {
    System.out.println("Codepage = " + codepage);
}

FileInputStream fis = new FileInputStream(src);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfReader reader = new PdfReader(fis);
PdfStamper stamper = new PdfStamper(reader, baos);

// Fill all fields in PDF form
String text = "aM\u0302a"; // …
Run Code Online (Sandbox Code Playgroud)

pdf unicode itext pdf-form

14
推荐指数
1
解决办法
866
查看次数

改变jfree图表的背景颜色

我想改变jfreechart的背景颜色.它以灰色显示,我想要一个白色背景.我试过chart.setBackgroundPaint(Color.WHITE); 但它并没有向我展示白色背景.我有以下代码显示该图

chart.setBackgroundPaint(Color.WHITE); 
Run Code Online (Sandbox Code Playgroud)

我该如何显示白色背景?

java swing jfreechart

10
推荐指数
1
解决办法
7285
查看次数

IText使用XML Worker防止跨多个页面的行划分

我们正在使用带有XML Worker的iText 5.5.7,并且遇到了长表的问题,其中在页面末尾运行的行被分成两个到下一页(见图).

我们尝试page-break-inside:avoid;按照预防页面中断的建议使用iText,XMLWorkeriText在HTML表格中的PDF页面之间切换但没有效果.

我们试过了

  • 在a中包装每一行<tbody>并应用分页符避免(没有效果)
  • 定位tr, td和应用分页符(无效)
  • 将每个内容包装td在a中div并应用分页符(itext一旦到达页面结尾就停止处理行)

我们的印象page-break-inside:avoid是受到支持但尚未看到对此的确认.是否有使用XML worker创建此效果的示例或最佳实践,或者是执行此级别操作所需的Java API?

干杯

目前正在分页的行:

行将溢出到下一页(参见红色轮廓)

期望的效果:包含太多数据的行包装到下一页 期望的结果,如果太长,行会突破到下一页(参见绿色轮廓)

java itext page-break-inside xmlworker

9
推荐指数
1
解决办法
1934
查看次数

使用iText API为PDF文件中的所有书签创建目的地

我想编写一些带有PDF文档的(java)代码,并从所有书签创建命名目标.我认为iText API是最简单的方法,但我之前从未使用过API.

您将如何使用iText API编写此类代码?iText可以自己进行操作现有PDF所需的解析吗?我正在考虑的那种操作是:

  • 打开,
  • 查找书签,
  • 创建目的地,
  • 保存,
  • 关.

或者是否有更好的API?

pdf pdf-generation bookmarks itext tagged-pdf

7
推荐指数
2
解决办法
5653
查看次数

我可以用iTextSharp填写加密的PDF吗?

我有一个可填写,可保存的PDF文件,其中包含所有者密码(我无权访问).我可以在Adobe Reader中填写它,导出FDF文件,修改FDF文件,然后导入它.

然后我尝试用iText for .NET做到这一点.我无法从我的PdfReader创建PdfStamper,因为我没有向读者提供所有者密码.有没有办法以编程方式执行此操作或必须重新创建文档?

即使使用FdfReader也需要PdfStamper.我错过了什么吗?任何合法的东西 - 我很确定我可以破解文件,但我不能.具有讽刺意味的是,重新创建它可能会没问题.

c# itext

7
推荐指数
2
解决办法
5552
查看次数

7
推荐指数
1
解决办法
5万
查看次数

在同一页面上将表添加到现有PDF - ITEXT

我的java项目有两个部分.

  • 我需要填充pdf的字段
  • 我需要在页面空白区域的填充部分下面添加一个表(这个表需要能够翻转到下一页).

我可以单独做这些事情(填充pdf并创建一个表).但我无法有效地合并它们.我试过做一个doc.add(table),这会导致表格在pdf的下一页上,这是我不想要的.

我基本上只需要能够指定表在页面上的起始位置(因此它不会与现有内容重叠),然后将表格标记到现有的pdf上.

如果这不起作用,我的另一个选择是尝试将字段添加到将由表内容填充的原始pdf(因此它将是基于字段的表).

有什么建议?

编辑:

我是iText的新手并且之前没有使用过columntext,但是我试图在下面的代码中测试它,但是没有显示表.我查看了其他列文本示例,我还没有看到将columntext添加回pdf的确切位置.

//CREATE FILLED FORM PDF
PdfReader reader = new PdfReader(sourcePath);  
PdfStamper pdfStamper = new PdfStamper(reader, new FileOutputStream(destPath));
pdfStamper.setFormFlattening(true);
AcroFields form = pdfStamper.getAcroFields();

form.setField("ID", "99999");
form.setField("ADDR1", "425 Test Street");
form.setField("ADDR2", "Test, WA 91334");
form.setField("PHNBR", "(999)999-9999");
form.setField("NAME", "John Smith");

//CREATE TABLE
PdfPTable table = new PdfPTable(3);
Font bfBold12 = new Font(FontFamily.HELVETICA, 12, Font.BOLD, new BaseColor(0, 0, 0)); 
insertCell(table, "Table", Element.ALIGN_CENTER, 1, bfBold12);
table.completeRow(); 

ColumnText column = new ColumnText(pdfStamper.getOverContent(1));
column.addElement(table);

pdfStamper.close();
reader.close();
Run Code Online (Sandbox Code Playgroud)

java pdf itext

7
推荐指数
1
解决办法
8265
查看次数

我应该动态重新创建PDF,而不是将其存储在数据库或文件系统中吗?

我需要客户能够下载已发送给他们的信件的PDF.

我已经阅读了关于数据库与文件或图像的文件系统存储的线程,听起来有点共识是,对于除了少量图像之外的任何东西,文件系统都是可行的方法.

我想知道的:

  • 合理的替代方案是将字母详细信息存储在数据库中,并在请求时"动态"重新创建PDF吗?
  • 这种方法优于或低于从文件系统中获取PDF吗?

c# asp.net sql-server-2005 itext

6
推荐指数
2
解决办法
503
查看次数

将内存流合并到一个iText文档

我有四个要合并的MemoryStream数据,然后打开pdfDocument,而不创建单个文件.

可以将它们写入文件然后合并它们但这样做会很糟糕,这也会导致一些问题,所以我想避免这种情况.

但是,我找不到将MemoryStreams与iText5 for .NET合并的方法.

现在,这是我用文件做的方式:

    private static void ConcatenateDocuments()
    {
        var stream = new MemoryStream();

        var readerFrontPage = new PdfReader(Folder + FrontPageName);
        var readerDocA = new PdfReader(Folder + docA);
        var readerDocB = new PdfReader(Folder + DocB);
        var readerAppendix = new PdfReader(Folder + Appendix);
        var pdfCopyFields = new PdfCopyFields(stream);

        pdfCopyFields.AddDocument(readerFrontPage);
        pdfCopyFields.AddDocument(readerDocA );
        pdfCopyFields.AddDocument(readerDocB);
        pdfCopyFields.AddDocument(readerAppendix);
        pdfCopyFields.Close();

        SavePdf(stream, FilenameReport);
    }
Run Code Online (Sandbox Code Playgroud)

由于我需要删除文件的使用,因此我保留了MemoryStream,因为不同的部分是从不同的资源构建的.所以我引用了这些内存流.

如何才能做到这一点?

merge memorystream itext c#-4.0

6
推荐指数
1
解决办法
9662
查看次数