iTextSharp PdfContentByte 添加模板

iTextSharp PdfContentByte AddTemplate

我正在尝试在 iTextSharp PdfContentByte AddTemplate 中使用缩放

PdfContentByte cb = writer.DirectContent;
cb.AddTemplate(page, scalex, 0, 0, scaley, x, y);

它有效,但 scalex с 和 scaley 轮。如果 scalex = 1,04776,在输出文件形式 100 мм 中,我准确地获得 105 毫米,而不是 104,776 毫米。 如果有机会在输出文件中获得 104,776 毫米?

为了将浮点数写入内容流,iText 提供了两种模式,普通模式和高精度模式。在正常模式下,iText 使用一些不规则的模式对数字进行四舍五入;如果数字介于 1 和 32767 之间,则最多四舍五入到小数点后两位。

您的 1.04776 在该范围内,因此四舍五入为 1.05

在iTextSharp中5.x你可以通过设置

切换到高精度模式
iTextSharp.text.pdf.ByteBuffer.HIGH_PRECISION = true;

另请阅读 this old answer

在 iText 7 中有一个类似的静态变量,iText.IO.Source.ByteUtils.HighPrecision。因为它被声明为内部的,你不能直接改变它,但是在 iText.IO.Source.OutputStream 中有静态方法:

public static bool GetHighPrecision()
{
    return ByteUtils.HighPrecision;
}

public static void SetHighPrecision(bool value)
{
    ByteUtils.HighPrecision = value;
}

因此,这里要切换到高精度模式调用

iText.IO.Source.OutputStream.SetHighPrecision(true);