Dire abcPdf à l'échelle de l'html pour tenir sur une seule page pdf
Je suis en utilisant abcPdf de convertir un fichier HTML dans un fichier pdf. Le pdf d'une seule page A4 paysage.
Savez-vous s'il existe une façon de dire abcPdf à l'échelle de la page HTML pour tenir sur une seule page dans le pdf? J'ai essayé d'utiliser le Agrandir() la méthode, et il met à l'échelle le contenu, mais encore, il tombe dans les pages, même si c'était sur une page. J'ai été de me gratter la tête sur ce pendant un certain temps maintenant, et je me demande si quelqu'un l'a fait.
Voici le code que j'utilise pour le moment:
public byte[] UrlToPdf(string url, PageOrientation po)
{
using (Doc theDoc = new Doc())
{
//When in landscape mode:
//We use two transforms to apply a generic 90 degree rotation around
//the center of the document and rotate the drawing rectangle by the same amount.
if (po == PageOrientation.Landscape)
{
//apply a rotation transform
double w = theDoc.MediaBox.Width;
double h = theDoc.MediaBox.Height;
double l = theDoc.MediaBox.Left;
double b = theDoc.MediaBox.Bottom;
theDoc.Transform.Rotate(90, l, b);
theDoc.Transform.Translate(w, 0);
//rotate our rectangle
theDoc.Rect.Width = h;
theDoc.Rect.Height = w;
//To change the default orientation of the document we need to apply a rotation to the root page object.
//By doing this we ensure that every page in the document is viewed rotated.
int theDocID = Convert.ToInt32(theDoc.GetInfo(theDoc.Root, "Pages"));
theDoc.SetInfo(theDocID, "/Rotate", "90");
}
theDoc.HtmlOptions.PageCacheEnabled = false;
theDoc.HtmlOptions.AddForms = false;
theDoc.HtmlOptions.AddLinks = false;
theDoc.HtmlOptions.AddMovies = false;
theDoc.HtmlOptions.FontEmbed = false;
theDoc.HtmlOptions.UseResync = false;
theDoc.HtmlOptions.UseVideo = false;
theDoc.HtmlOptions.UseScript = false;
theDoc.HtmlOptions.HideBackground = false;
theDoc.HtmlOptions.Timeout = 60000;
theDoc.HtmlOptions.BrowserWidth = 0;
theDoc.HtmlOptions.ImageQuality = 101;
//Add url to document.
int theID = theDoc.AddImageUrl(url, true, 0, true);
while (true)
{
if (!theDoc.Chainable(theID))
break;
theDoc.Page = theDoc.AddPage();
theID = theDoc.AddImageToChain(theID);
}
//Flattening the pages (Whatever that means)
for (int i = 1; i <= theDoc.PageCount; i++)
{
theDoc.PageNumber = i;
theDoc.Flatten();
}
return theDoc.GetData();
}
}
OriginalL'auteur beon | 2010-01-25
Vous devez vous connecter pour publier un commentaire.
Donc voici comment j'ai résolu ce problème.
Tout d'abord, j'avais besoin de la hauteur de la page HTML à être transmis à la génération des pdf de la méthode, j'ai donc ajouté ceci sur la page pdf-ed:
et dans le code behind:
Maintenant, lorsque j'appelle la méthode de génération des pdf, je peux passer la hauteur de l'HTML. Une fois que j'ai la hauteur c'est tout une question de calcul de la largeur de la pdf "viewport" tels que la hauteur s'adapte sur la page pdf:
Puis spécifiez le BrowserWidth paramètre soit par le biais de
HtmlOptions
detheDoc
:ou lors de l'ajout de l'url de
theDoc
:EDIT: Cela résout la question, donc je vais le marquer comme réponse. Maintenant, la prochaine chose à faire est de créer le pdf dans le protrait mode paysage ou en fonction de la largeur et de la hauteur de l'HTML, de sorte que le maximum de l'espace est utilisé sur la page pdf.
Salut mike ou beon tous ceux qui ont des ide sur les dessous de la question stackoverflow.com/questions/22069825/...
OriginalL'auteur beon
Cela pourrait être un peu plus simple
[modifier]
Bien scrollHeight échoue avec ver8 cela fonctionne bien
OriginalL'auteur KillerKiwi
Dans le cas où vous utilisez le 'Gecko' moteur, ce moteur ne prend pas en charge GetInfoInt' nous avons donc besoin d'écrire du javascript pour obtenir la hauteur. Faites un mannequin rend d'abord à déterminer la hauteur et ensuite définir cette hauteur d'origine AbcDoc.
OriginalL'auteur DIG