Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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# 使用pdflibnet和c从pdf转换为jpg后,保持jpg的质量#_C#_Pdf_Jpeg - Fatal编程技术网

C# 使用pdflibnet和c从pdf转换为jpg后,保持jpg的质量#

C# 使用pdflibnet和c从pdf转换为jpg后,保持jpg的质量#,c#,pdf,jpeg,C#,Pdf,Jpeg,我使用此代码将pdf文件转换为jpg图像,但jpg图像的质量非常差;有人知道如何改变pdf的质量或保持pdf的质量? 我正在制作一个质量优异的多页pdf。 对不起,我的英语不好 public void ConvertPDFtoJpg(string filename, string dirOut) { string[] archivo = filename.Split('\\'); string final = archivo[3].Replace(".p

我使用此代码将pdf文件转换为jpg图像,但jpg图像的质量非常差;有人知道如何改变pdf的质量或保持pdf的质量? 我正在制作一个质量优异的多页pdf。 对不起,我的英语不好

 public void ConvertPDFtoJpg(string filename, string dirOut)
    {
        string[] archivo = filename.Split('\\');
        string final = archivo[3].Replace(".pdf", "");
        string archOri = final;

        PDFLibNet.PDFWrapper _pdfDoc = new PDFLibNet.PDFWrapper();
        _pdfDoc.LoadPDF(filename);

        int p = 1;

        SqlConnection con1 = new SqlConnection("Data Source=192.168.10.25;User ID=sa;Initial Catalog=BECO");
        con1.Open();

        for (int s = 0; s < _pdfDoc.PageCount; s++)
        {
            Image img = RenderPage(_pdfDoc, s);
            string rutaFin = final + ".page" + p + ".jpg";
            img.Save(Path.Combine(dirOut, string.Format(rutaFin)));

            string textoCmd = "INSERT into imagenes (ruta1,valor,estado) VALUES ('" + rutaFin +"', '"+ archOri +"', 0)";
            SqlCommand com4 = new SqlCommand(textoCmd, con1);
            com4.ExecuteNonQuery();

            p++;
        }
        _pdfDoc.Dispose();
        con1.Close();

    }
    public Image RenderPage(PDFLibNet.PDFWrapper doc, int page)
    {
        doc.CurrentPage = page + 1;
        doc.CurrentX = 0;
        doc.CurrentY = 0;

        doc.RenderPage(IntPtr.Zero);

        // create an image to draw the page into
        var buffer = new Bitmap(doc.PageWidth, doc.PageHeight);
        doc.ClientBounds = new Rectangle(0, 0, doc.PageWidth, doc.PageHeight);
        using (var g = Graphics.FromImage(buffer))
        {
            var hdc = g.GetHdc();
            try
            {
                doc.DrawPageHDC(hdc);
            }
            finally
            {
                g.ReleaseHdc();
            }
        }
        return buffer;

    }
public void ConvertPDFtoJpg(字符串文件名,字符串目录)
{
字符串[]archivo=filename.Split('\\');
字符串final=archivo[3]。替换(“.pdf”,”);
字符串archOri=final;
PDFLibNet.PDFWrapper _pdfDoc=新的PDFLibNet.PDFWrapper();
_pdfDoc.LoadPDF(文件名);
int p=1;
SqlConnection con1=新的SqlConnection(“数据源=192.168.10.25;用户ID=sa;初始目录=BECO”);
con1.Open();
对于(int s=0;s<_pdfDoc.PageCount;s++)
{
图像img=RenderPage(_pdfDoc,s);
字符串rutaFin=final+“.page”+p+“.jpg”;
Save(Path.Combine(dirOut,string.Format(rutaFin));
string textoCmd=“插入imagenes(ruta1,valor,estado)值(“+rutaFin+”,“+archOri+”,0)”;
SqlCommand com4=新的SqlCommand(textoCmd,con1);
com4.ExecuteNonQuery();
p++;
}
_pdfDoc.Dispose();
con1.Close();
}
公共图像渲染页(PDFLibNet.PDFWrapper文档,int页)
{
doc.CurrentPage=第+1页;
doc.CurrentX=0;
doc.CurrentY=0;
文档渲染页(IntPtr.Zero);
//创建要将页面绘制到其中的图像
var buffer=新位图(doc.PageWidth、doc.PageHeight);
doc.ClientBounds=新矩形(0,0,doc.PageWidth,doc.PageHeight);
使用(var g=Graphics.FromImage(缓冲区))
{
var hdc=g.GetHdc();
尝试
{
DrawPageHDC(hdc)文件;
}
最后
{
g、 释放hdc();
}
}
返回缓冲区;
}
Matias

您需要做的是在RenderPage方法中添加一行来指定输出DPI

例:


在本例中,我将其设置为300 DPI,这将为您提供更多细节。

当您提高质量时,您是指图像的重新创建还是图像的分辨率?我指的是转换后图像的重新创建,因为放大创建的图像时会失真。您能在图像前后发布一个示例吗?我猜原始图像是双色的,这个过程是从中创建一个8位JPEG,而更合适的选项是1-bpp flate或G4编码。看起来你正在将图像打印到一个PDF大小的位图中,而不是图像的大小。因此,当你缩放时,你的分辨率很低。我不能发布图像,因为我是新用户;该pdf文件是在卓越的质量,但转换成jpg后的质量是非常差的,任何人都知道任何代码,使质量的图像创建,我需要一个样本代码为这个请
...
doc.CurrentX = 0;
doc.CurrentY = 0;

doc.RenderDPI = 300;
...