Nous utilisons un produit appelé DynamicPDF pour générer des PDF à la volée à partir de données dynamiques d'une base de données. Leur documentation indique que leur logiciel laisse les octets d'image intacts et n'apporte aucun changement. Malgré cela, nous avons observé que les images que nous ajoutons semblent avoir une perte de qualité sur la sortie PDF résultante (du moins c'est ce à quoi elles ressemblent). Donc, ma question est de savoir ce que je dois faire avec l'API DynamicPDF pour m'assurer que la qualité d'image produite est égale ou proche de ce que j'ai mis dedans.Perte de qualité d'image DynamicPDF
Nous utilisons la version 5.1.2 Build 13650, ci-dessous est le code que nous utilisons pour ajouter l'image.
private void plcImageMain_LaidOut(object sender, PlaceHolderLaidOutEventArgs e)
{
if (e.LayoutWriter.RecordSets.Current.HasData)
{
string productId = e.LayoutWriter.RecordSets.Current["ProductId"].ToString();
string imgUrl = base.SetImageUrlParams(e.LayoutWriter.RecordSets.Current["ImageUrl"] as string, e.ContentArea.Width, e.ContentArea.Height);
System.Drawing.Bitmap bm = base.GetBitmap(imgUrl);
ceTe.DynamicPDF.PageElements.Image img = new ceTe.DynamicPDF.PageElements.Image(bm, 0, 0);
img.Height = e.ContentArea.Height;
img.Width = e.ContentArea.Width;
e.ContentArea.Add(img);
}
}
/// <summary>
/// Gets a bitmap from the requested image url
/// </summary>
/// <param name="imgCtrl"></param>
/// <param name="imgUrl"></param>
protected System.Drawing.Bitmap GetBitmap(string imgUrl)
{
// TODO: Add some validation to ensure the url is an image.
System.Net.WebRequest httpRequest = System.Net.HttpWebRequest.Create(imgUrl);
using (System.Net.HttpWebResponse httpResponse = httpRequest.GetResponse() as System.Net.HttpWebResponse)
using (Stream imgStream = httpResponse.GetResponseStream())
{
System.Drawing.Bitmap bm = System.Drawing.Bitmap.FromStream(imgStream) as System.Drawing.Bitmap;
return bm;
}
}
[Modifier]
Here est avant et après capture d'écran.
[Modifier]
code à l'aide GetImage (pourquoi si lent?)
protected ceTe.DynamicPDF.Imaging.ImageData GetImageData(string imgUrl)
{
ImageData imgData = null;
using (System.Net.WebClient wc = new System.Net.WebClient())
{
imgData = ImageData.GetImage(wc.DownloadData(imgUrl));
}
return imgData;
}
GetImageData ("http://s7d2.scene7.com/is/image/SwissArmy/cm_vm_53900E--111mm_sol_front_a?fmt=jpeg&wid=400&hei=640");
Pouvez-vous nous montrer un exemple "avant/après"? –
De même, pouvez-vous extraire une image du PDF (en utilisant l'image de sélection/copie) et la comparer avec l'image source? De cette façon, vous obtenez une preuve à 100% si quelque chose est modifié. –
J'ai ajouté un lien vers une capture d'écran avant et après dans le message ci-dessus. BTW comment extraire-vous des images à partir d'un PDF? Je suppose qu'il y a un moyen de le faire dans Acrobat Reader? – James