C# 使用pdflibnet和c从pdf转换为jpg后,保持jpg的质量#
我使用此代码将pdf文件转换为jpg图像,但jpg图像的质量非常差;有人知道如何改变pdf的质量或保持pdf的质量? 我正在制作一个质量优异的多页pdf。 对不起,我的英语不好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
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;
...