Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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
C# 使用iTextSharp更改acroform内的图像DPI_C#_Asp.net_Itextsharp - Fatal编程技术网

C# 使用iTextSharp更改acroform内的图像DPI

C# 使用iTextSharp更改acroform内的图像DPI,c#,asp.net,itextsharp,C#,Asp.net,Itextsharp,我正在编写一个ASP.NET(C#)应用程序,它使用iTextSharp将图像(更具体地说是签名)嵌入到AcroForm中。我从外部媒体(USB Wacom平板电脑)收集图像并调整其大小以适应acroform签名占位符(这是从平板电脑拍摄的照片的一半大小),取得了不错的效果。 我对结果并不完全满意,因为平板电脑以总分辨率(我认为不超过75 dpi)收集签名,因此调整其大小(即使使用最保守的算法)会产生一点模糊/粗糙的图像。。。这本书可读性很好,但在我看来并不好看。 我认为,改变图像的DPI而不是

我正在编写一个ASP.NET(C#)应用程序,它使用iTextSharp将图像(更具体地说是签名)嵌入到AcroForm中。我从外部媒体(USB Wacom平板电脑)收集图像并调整其大小以适应acroform签名占位符(这是从平板电脑拍摄的照片的一半大小),取得了不错的效果。 我对结果并不完全满意,因为平板电脑以总分辨率(我认为不超过75 dpi)收集签名,因此调整其大小(即使使用最保守的算法)会产生一点模糊/粗糙的图像。。。这本书可读性很好,但在我看来并不好看。 我认为,改变图像的DPI而不是改变其大小,可能会保留所有原始定义,从而在PDF中渲染时提供更好的结果。 我怎样才能达到这个结果?我的意思是有一种简单的方法使用iTextSharp插入图像并设置其DPI,或者我必须预处理图像并在嵌入之前更改DPI? 是否可以定义一个保存图像而不是文本的AcroForm字段

@BrunoLowagie我当然可以,这是密码:

            using (Stream _sInputPdfStream = new FileStream(_sTempNomeFile, FileMode.Open, FileAccess.Read, FileShare.Read))
            using (Stream _sInputImageStream = new FileStream(sImagePath, FileMode.Open, FileAccess.Read, FileShare.Read))
            using (Stream _sOutputPdfStream = new FileStream(_sOutputNomeFile, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                var _rReader = new PdfReader(_sInputPdfStream);
                var _sStamper = new PdfStamper(_rReader, _sOutputPdfStream);
                var _cContent = _sStamper.GetOverContent(1);

                iTextSharp.text.Image _iImage = iTextSharp.text.Image.GetInstance(_sInputImageStream);
                _iImage.SetAbsolutePosition(400, 0);
                _cContent.AddImage(_iImage);
                _sStamper.Close();
            }
当然,sImagePath值是我刚刚上传到PDF的图像的路径

致以最良好的祝愿,
Weirdgyn

iTextSharp不会减少图像中的像素数。DPI完全取决于将图像添加到PDF时为图像定义的尺寸。因此,我不理解你关于“更改DPI”的问题,因为你永远无法添加像素来增加DPI。只能在小于当前矩形的矩形中显示像素。这就是你想做的吗?请澄清。如果图像的尺寸保持不变,您将得到相同的输出。为什么不使用收集线段列表和使用多边形路径?你甚至可以收集压力,构建一个更好地反映钢笔的多边形(可能会占用更少的空间),并用更少的工件进行缩放。@Bruno在我使用签名占位符的表单中非常窄。如果我添加原始大小的图片(如平板电脑捕获的),它将不适合这样的占位符。因此,在将图片“附加”到PDF中之前,我将缩放图片。从而导致图像分辨率的损失。我希望避免在不缩放图像的情况下调整图像的大小和附加图像,但是,正如我之前所述,这种方式将不适合占位符。唯一的办法是改变图片的dpi,但我不知道是否有办法,无论如何,我不知道iTextSharp是否允许我这么做。@Blinth这是一个非常好的建议,但我必须在平板电脑处理过程中做更多的事情,这在目前是我无法控制的。首先,我不喜欢伪签名,但这正是您想要生成的:您想要添加一个看起来像签名的光栅图像,而不是真正的数字签名。那太简单了。第二:当你谈论一幅图像的占位符时,我想到了一种常见的方法:一个按钮字段,你想替换它的图标来缩放和定位一幅图像,如免费电子书中所述。另见