gpt4 book ai didi

Android PDF Writer(APP) 编码

转载 作者:行者123 更新时间:2023-11-29 16:05:25 25 4
gpt4 key购买 nike

我正在使用 Android PDF Write(APW) 创建 PDF,但它不适用于某些特殊字符(葡萄牙语)。

mypdf.addText(170, 50, 40,"Coração");

标准的编码是:

mypdf.setFont(StandardFonts.SUBTYPE, StandardFonts.COURIER, StandardFonts.WIN_ANSI_ENCODING);
outputToFile("helloworld.pdf",pdfcontent,"ISO-8859-1");

我试过了

outputToFile("helloworld.pdf",pdfcontent,"UTF-8");
outputToFile("helloworld.pdf",pdfcontent,"UTF-16");
outputToFile("helloworld.pdf",pdfcontent,"Cp1252");

并没有成功。有什么想法我应该怎么做?

编辑

outputToFile 方法定义为:

    private void outputToFile(String fileName, String pdfContent, String encoding) {
File newFile = new File(Environment.getExternalStorageDirectory() + "/" + fileName);
try {
newFile.createNewFile();
try {
FileOutputStream pdfFile = new FileOutputStream(newFile);
pdfFile.write(pdfContent.getBytes(encoding));
pdfFile.close();
} catch(FileNotFoundException e) {
//
}
} catch(IOException e) {
//
}
}

addText 方法定义为:

    public void addText(int leftPosition, int topPositionFromBottom, int fontSize, String text, String transformation) {
addContent(
"BT\n" +
transformation + " " + Integer.toString(leftPosition) + " " + Integer.toString(topPositionFromBottom) + " Tm\n" +
"/F" + Integer.toString(mPageFonts.size()) + " " + Integer.toString(fontSize) + " Tf\n" +
"(" + text + ") Tj\n" +
"ET\n"
);
}

此外,我将字体颜色更改为白色并添加以下原始内容:

mypdf.addRawContent("1 1 1 rg\n"); 

然后我回到黑色字体颜色:

    mypdf.addRawContent("0 0 0 rg\n");

最佳答案

我获取了所有提供的信息,编写了以下简单的单元测试方法并运行了它。

public void test19192108()
{
PDFWriter mPDFWriter = new PDFWriter(PaperSize.FOLIO_WIDTH, PaperSize.FOLIO_HEIGHT);
mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.COURIER, StandardFonts.WIN_ANSI_ENCODING);
mPDFWriter.addText(170, 50, 40,"Coração");

String pdfcontent = mPDFWriter.asString();
outputToFile("helloworld19192108.pdf",pdfcontent,"ISO-8859-1");
}

(outputToFile是 APW PDFWriterDemo 类的辅助方法)

结果是这样的:

Screenshot of helloworld19192108.pdf in Adobe Reader

这似乎非常符合预期。

因此,无论以何种方式它不适用于 OP 的某些特殊字符(葡萄牙语),都缺少一些重现问题的重要信息。

PS:根据开发环境的设置,源代码中可能存在非 ASCII 字符的问题。因此,替换

可能是个好主意
    mPDFWriter.addText(170, 50, 40,"Coração");

    mPDFWriter.addText(170, 50, 40,"Cora\u00e7\u00e3o");

PPS:Adobe Reader 在查看这样生成的文件后想要修复它。原因是交叉引用表坏了。为它生成条目的代码是这样的:

public void addObjectXRefInfo(int ByteOffset, int Generation, boolean InUse) {
StringBuilder sb = new StringBuilder();
sb.append(String.format("%010d", ByteOffset));
sb.append(" ");
sb.append(String.format("%05d", Generation));
if (InUse) {
sb.append(" n ");
} else {
sb.append(" f ");
}
sb.append("\r\n");
mList.add(sb.toString());
}

(from CrossReferenceTable.java)

计算此条目中的字符数,我们得到 10 + 1 + 5 + 3 + 2 = 21。

不过,根据规范:

Each entry shall be exactly 20 bytes long, including the end-of-line marker

(from section 7.5.4 Cross-Reference Table of ISO 32000-1)

当使用(当前版本的)Android PDF Writer 时,您也应该修复此代码。

关于Android PDF Writer(APP) 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19192108/

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