Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加到PDF的文本显示粗体/粗糙_Java_Pdf_Itext_Pdf Manipulation - Fatal编程技术网

Java 添加到PDF的文本显示粗体/粗糙

Java 添加到PDF的文本显示粗体/粗糙,java,pdf,itext,pdf-manipulation,Java,Pdf,Itext,Pdf Manipulation,我正在添加/替换现有PDF内容页上的一些页码,但文本显示为粗体或粗糙。这是不对的,我似乎无法修复它 这就是我的意思: 右边的数字是我正在替换的现有页码,文本很好。左边的数字是我用Java中的iText添加的页码 代码如下: private static void fixTOCPageNumbers(int i, PdfContentByte content, List<Section> sections) throws DocumentException, IOEx

我正在添加/替换现有PDF内容页上的一些页码,但文本显示为粗体或粗糙。这是不对的,我似乎无法修复它

这就是我的意思:

右边的数字是我正在替换的现有页码,文本很好。左边的数字是我用Java中的iText添加的页码

代码如下:

private static void fixTOCPageNumbers(int i, PdfContentByte content, List<Section> sections)
        throws DocumentException, IOException {

    int xPositionRec;
    int yPositionRec;
    int xPositionText;
    int yPositionText;
    int xOffset = 0;
    int yOffset = 0;

    content.saveState();
    content.setColorStroke(new Color(77,77,77));

    content.beginText();
    content.setFontAndSize(BaseFont.createFont("fonts/LTe50327.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED), 10f);

    int count = 5;

    for(int j = 4; j <= sections.size() - 2; j++)
    {           
        int startPageIndex = sections.get(j).GetStartPageIndex();
        int endPageIndex = sections.get(j).GetEndPageIndex();

        xPositionRec = 281;
        yPositionRec = 385;
        xPositionText = 266;
        yPositionText = 386;

        if(j > 6)
        {
            yPositionRec = 195;
            yPositionText = 196;
        }

        for(int k = startPageIndex; k <= endPageIndex; k++)
        {               
            content.rectangle(xPositionRec+xOffset,yPositionRec-yOffset,12,12);
            content.setRGBColorFill(255,255,255);
            content.showTextAligned(PdfContentByte.ALIGN_CENTER, String.format("%d", count), xPositionText+xOffset, yPositionText-yOffset, 0);
            content.setRGBColorFill(77,77,77);
            //content.fillStroke();
            yOffset += 18;

            count++;
        }

        yOffset = 0;

        if(j > 6)
        {
            xOffset += 229;
        }
        else if(j == 6)
        {
            xOffset = 0;
        }
        else
        {
            xOffset += 230;
        }
    }

    xOffset = 0;
    yOffset = 0;

    content.restoreState();
    content.endText();
}
private static void fixtocPageNumber(inti、PdfContentByte内容、列表部分)
抛出DocumentException,IOException{
int xPositionRec;
int-yPositionRec;
int-xPositionText;
int-yPositionText;
int xOffset=0;
int-yOffset=0;
content.saveState();
内容。setColorStroke(新颜色(77,77,77));
content.beginText();
content.setFontAndSize(BaseFont.createFont(“font/LTe50327.ttf”,BaseFont.IDENTITY,BaseFont.EMBEDDED),10f);
整数计数=5;
对于(int j=4;j 6)
{
yPositionRec=195;
yPositionText=196;
}
对于(int k=起始指数;k 6)
{
xOffset+=229;
}
else如果(j==6)
{
xOffset=0;
}
其他的
{
xOffset+=230;
}
}
xOffset=0;
yOffset=0;
content.restoreState();
content.endText();
}
我做错什么了吗?这是我第一次使用iText,代码库最初不是我的


任何帮助都将不胜感激

您可以模拟粗体,例如:

C#


查看LTe50327.ttf,你有FRUTIERGE字体,上面没有粗体字。该字体在程序的其他地方使用,效果非常完美!我认为这一定是与
setcolorstrope(新颜色(77,77,77))有关的东西行,可能是您应该尝试将其从
PdfContentByte
中删除…只是一个猜测,但我认为它会改变强度,您可以尝试放置类似于
setColorStroke(Color.Black)的内容请提供PDF进行检查。您可能希望获取您创建的文件,查找内容流,并查看字体是否与其他地方使用的字体相同或不同。我希望内容流包括“/someresourcename 10.0 Tf 196 266 Td(6)Tj”之类的内容someresourcename'将是页面字体资源字典中的名称。如果它与现有的文本不一样,那就是你的问题。
cb.BeginText();
cb.SetFontAndSize(font, 11F);

cb.SetCharacterSpacing(1F);
// Fill color (stroke fill)
cb.SetRGBColorFill(0, 0, 0);  
cb.SetLineWidth(0.5F);
// Fill stroke simulate bold
cb.SetTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE);

cb.SetTextMatrix(x, pageSize.Height - y);
cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, s, (pageSize.Width / 2F), pageSize.Height - y, 0);

cb.EndText();