---
title: "XHTML till PDF komponent"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/182736-xhtml-till-pdf-komponent"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Gildebrand"
published: "2010-03-11T09:38:23.000Z"
updated: "2010-04-03T09:54:52.000Z"
replies: 13
views: 1233
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/182736-xhtml-till-pdf-komponent"
---

# XHTML till PDF komponent

## #1 — Gildebrand, 2010-03-11T09:38Z

Hejsan!

Jag är på jakt efter en komponent som jag kan implementera på en Asp.Net sida för att konvertera XHTML till PDF. Jag vill kunna konvertera bilder, listor och tabeller. Jag vill inte behöva ange koordinater för vart texten ska ligga. Det Vore också en fördel om man kunde "Streama" den färdiga PDFen till användaren och slippa spara den på servern. Det finns många fina såna här komponenter, men de jag har hittat kostar en massa pengar. Jag vill ha Gratis och Gott :)

Permalänk: https://www.webforum.nu/p/182736

## #2 — hopparn, 2010-03-21T08:37Z

Gratis: vet ej
ABCPDF gör det du vill och mer där till, kostar dock om du INTE vill göra reklam med en backlink till dem som skapat produkten. 
<https://www.websupergoo.com>

Permalänk: https://www.webforum.nu/p/2231395

## #3 — Gildebrand, 2010-03-22T09:08Z

Var ju inga stora pengar det kostade dock. Kollade lite på features för ABCPdf, och verkade som att det gick att streama PDFen till webbläsaren, och konvertera från html till PDF, korrekt?

Permalänk: https://www.webforum.nu/p/2231480

## #4 — hopparn, 2010-03-22T13:28Z

Japp, använt det många gånger då man genererar kvitton eller fakturor för att sen presentera i webbläsaren mha en handler eller bara bifoga i mail som attachment

Bygg en html sida som ser ut exakt som du vill ha pdf:en och skicka in dess adress, ut kommer en css hanterad pdf :)

Den har även stöd för det något tveksamma pagebreak:after etc så man kan göra snygga radbrytningar, t ex om man har många orderrader som ska in, räkna upp till det antal som får plats och bryt sen för ny sida... mm mm

Permalänk: https://www.webforum.nu/p/2231495

## #5 — Gildebrand, 2010-03-27T14:13Z

Jag har laddat ner ABCPdf 7 för .Net x64, och ska lägga in referenserna i mitt projekt. Det går bra att lägga till ABCPdf.dll, men när jag ska lägga till ABCPdfCE7.dll så får jag följande felmeddelande:

"A reference to 'c:\\program files\\websupergoo\\ABCpdf.NET 7.0 x64\\ExampleSite\\bin\\ABCpdfCE7.dll' could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component."

Permalänk: https://www.webforum.nu/p/2231857

## #6 — hopparn, 2010-03-30T10:48Z

hmmm, jag har faktiskt inte kört x64, även om jag har x64 så har jag installerat 32 bitars, har du provat?

Permalänk: https://www.webforum.nu/p/2232075

## #7 — Gildebrand, 2010-03-30T12:47Z

Ja jag provade att ta bort x64 och köra 32-bitars men fick samma fel.

Permalänk: https://www.webforum.nu/p/2232082

## #8 — hopparn, 2010-03-31T06:51Z

Så här är det uppsatt i ett projekt jag har här på burken:
Referens till 

```
C:\Program Files (x86)\WebSupergoo\ABCpdf .NET 7.0\Common\ABCpdf.dll
```

 i references i mitt library

dessa båda using i min klass fil som hanterar själva pdf:erna

```
using WebSupergoo.ABCpdf7;
using WebSupergoo.ABCpdf7.Internal;
```

ett annat litet projekt jag satte upp så behövde jag referera till

```
C:\Program Files (x86)\WebSupergoo\ABCpdf .NET 7.0\ExampleProjects\PDFEnterpriseServices\bin\Debug\PdfEnterpriseServices.dll
```

och sen såklart till 

```
C:\Program Files (x86)\WebSupergoo\ABCpdf .NET 7.0\Common\ABCpdf.dll
```

Permalänk: https://www.webforum.nu/p/2232126

## #9 — Gildebrand, 2010-03-31T18:47Z

Jag har lagt till enbart ABCpdf.dll bland referenserna.
Båda usings är med.
Jag försöker köra följande kod:

```
            Doc theDoc = new Doc();
            theDoc.AddImageUrl("http://www.google.se/");
            theDoc.Save(Server.MapPath("htmlimport.pdf"));
            theDoc.Clear();
```

Och först får jag följande felmeddelande: <http://piclair.com/data/tdlty.jpg>
Och sen klagar den på theDoc.AddimageUrl, "HTML render is blank."

Permalänk: https://www.webforum.nu/p/2232164

## #10 — hopparn, 2010-03-31T21:40Z

har du provat att skapa ett simpelt först för att se om det funkar?
typ
Doc theDoc = new Doc();
theDoc.FontSize = 96;
theDoc.AddText("Hello World");
theDoc.Save(Server.MapPath("simple.pdf"));
theDoc.Clear();

Permalänk: https://www.webforum.nu/p/2232172

## #11 — hopparn, 2010-03-31T21:46Z

kolla också rättigheterna på mappen du ska spara pdf i. Hjälper inte det så kan du läsa lite och ladda hem ett demoprojekt här: <http://www.websupergoo.com/support.htm>

punkt 6.7 på denna sidan innehåller liknande fel som du har.

jag har kört detta på 32 bit winxp vs2005 samt xp 64 bit vs2008, så jag är inte så insatt i om det kan vara något med ett ev annat operativ eller version av vs :)

Permalänk: https://www.webforum.nu/p/2232173

## #12 — Gildebrand, 2010-04-01T15:05Z

Det var bara google det inte funkade med verkar det som. För nu lyckades jag skapa en PDF från Webforum.nu.

Hur gör man för att streama pdfen till webbläsaren?

Permalänk: https://www.webforum.nu/p/2232292

## #13 — hopparn, 2010-04-02T08:23Z

tja, det här är ett sätt:

```
protected void DoCreatePDF(object sender, CommandEventArgs e)
		{
			// Create url of print template and pass the key for cache
			string templatePath = String.Format("http://{0}{1}?rt=1&ft={3}&t={4}&hi={5}&guid={2}", Request.Url.Host, VirtualPathUtility.ToAbsolute("~/Templates/Report.aspx"), id, tbPerArrivalFrom.Text + '-' + tbPerArrivalTo.Text, DateTime.Now.Ticks, Page.Hotel.HotelId);

			var startPageFullUrl = String.Format("http://{0}{1}?ts={2}", Request.Url.Host, VirtualPathUtility.ToAbsolute("~/Templates/ReportFirstPage.aspx"), DateTime.Now.Ticks);

			// Create PDF from template
			var manager = new PDFManager();
			byte[] pdf = manager.GeneratePDF(templatePath, startPageFullUrl, PDFManager.PdfRotation.Landscape, PDFManager.SourceDocumentType.HTML, true);
			// Create filename
			string fileName = String.Format("Report_{0}-{1}.pdf", DateTime.Now.Date.ToShortDateString(), DateTime.Now.ToShortTimeString());

			// Clear the response, add file and change the content type
			Response.ClearHeaders();
			Response.ContentType = "application/pdf";
			Response.Clear();
			Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", fileName));
			Response.BinaryWrite(pdf);
			Response.End();
		}
```

och generatepdf ungefär dåhär... inte så vacker kanske men jag orkar inte mecka om den. Denna har ju som du ser lite andra saker, som försättsblad och sidhuvud sidfot etc, men du kan ju utgå från den, copy paste funkar nog inte rakt av :)

```
public byte[] GeneratePDF(string sourceDocumentFullUrl, string startPageFullUrl, PdfRotation pdfRotation, SourceDocumentType sourceDocumentType, bool addStartPage)
		{
			Doc mainDocument = new Doc();
			int pageID;
            
			mainDocument.HtmlOptions.DoMarkup = true;
			mainDocument.HtmlOptions.PageCacheEnabled = false;
            
			if (addStartPage){
                //// Set text to first page
				string firstPageText = string.Format("Rapport {0}", DateTime.Now.ToShortDateString());
				mainDocument.Font = mainDocument.AddFont("Verdana");
				mainDocument.HPos = 0.5;
				mainDocument.VPos = 0.75;
				mainDocument.AddHtml(firstPageText);
                mainDocument.AddImageUrl(startPageFullUrl);
			}

			pageID = mainDocument.AddPage();

			if (pdfRotation == PdfRotation.Landscape)
				RotateDocument(mainDocument);

			mainDocument.Page = pageID;
			pageID = mainDocument.AddImageUrl(sourceDocumentFullUrl);
			while (true){
				if (!mainDocument.Chainable(pageID))
					break;
				mainDocument.Page = mainDocument.AddPage();
				pageID = mainDocument.AddImageToChain(pageID);
			}

            for (int i = 1; i <= mainDocument.PageCount; i++){
				mainDocument.PageNumber = i;
				mainDocument.Flatten();
				if (i > 1){
					// Footer
					mainDocument.Rect.Width = 600;
					mainDocument.Rect.Height = 30;
					mainDocument.Rect.Inset(0, 0);
					mainDocument.Rect.Position(0, 0.3);
					mainDocument.HPos = 0.5;
					mainDocument.VPos = 0.5;
					mainDocument.AddText(string.Format("Report Yieldmanager {0} / {1}", i - 1, mainDocument.PageCount - 1));
				}
			}
            byte[] generatedPDF = mainDocument.GetData();
            mainDocument.Clear();
			mainDocument.Dispose();
            return generatedPDF;
		}
```

det du frågar efter är EGENTLIGEN bara det sista i första metoden...
Response.ClearHeaders();
			Response.ContentType = "application/pdf";
			Response.Clear();
			Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", fileName));
			Response.BinaryWrite(pdf);
			Response.End();

lycka till

Permalänk: https://www.webforum.nu/p/2232329

## #14 — Gildebrand, 2010-04-03T09:54Z

Tack! Nu funkar det också :)
Om jag nu skapar en PDF från en sida. Säg Sweclockers, så blir den bara att se ut såhär: <http://piclair.com/data/vl58n.jpg>

Som du ser så är det vitt längst ner på sidan, och den fångar inte resterande "sidor" av hemsida heller, utan bara en sida. Vet du varför det är så?

Permalänk: https://www.webforum.nu/p/2232379

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/182736-xhtml-till-pdf-komponent
