# XHTML drucken mit (oder ohne) Flying Saucer



## &gt;wintermute&lt; (1. Nov 2007)

Hi!
Ich versuche XHTML mit JAVA zu drucken. Zur Anzeige verwende ich derzeit Flying Saucer, das an und für sich auch ein _Printable_ erzeugt. Beim Versuch, das zu drucken, bekomme ich allerdings folgende Fehlermeldung:
FEHLER:  'Content is not allowed in prolog.'.
Das deutet auf einen Fehler beim X(HT)ML-Parsen hin, der Fehler kommt aber wie gesagt nur beim Drucken, nicht beim Anzeigen (wo ja auch das Dokument geparst wird).
Der zu druckende Text ist laut w3c Validator auch in Ordnung.

*

Hat jemand Erfahrung mit dem Drucken unter Flying Saucer?

Oder kennt ihr Alternativen? Ich möchte HTML on the fly generieren und sowohl anzeigen als auch drucken können (direkt aus JAVA ohne Umwege über etwa PDF). Dabei müssen aber alle CSS-Angaben eingehalten werden. Außerdem muss es freie Software sein.
*

DAAANKE!!!

PS: Sorry, falls das nicht der richtige Thread ist.....das passt zu mehreren Themen...


----------



## Guest (1. Nov 2007)

Lerne mit Flyingsourcer ein pdf zu erstellen,... 

Dann klappts auch sicher mit dem Drucken.


Dazu muß dein Xhtml exakt W3C konform sein. Der Fehler taucht auf, wenn das nicht der Fall ist.

Dazu benutzte das hier http://validator.w3.org/

Ich lasse meine Anwender ein pdf erstellen, dann können sie das pdf drucken. Ein direkter Druck ist unsinnig viiel Arbeit. Denn mit einem einfachen Druck ist es nicht getan. Druckereinstellungen, wie Randabstände usw müssen ja dann auch möglich sein. Erledigt ein PDF-Betrachter ganz von alleine.

Hoffe geholfen zu haben da Milbo


----------



## &gt;wintermute&lt; (1. Nov 2007)

Hi, danke für deine Antwort.
Mit iText (was auch vom Flying Saucer Projekt empfohlen wird) ist es problemlos möglich eine PDF-Datei zu erstellen. Es wäre trotzdem für mein Projekt wesentlich besser, wenn keine Datei gespeichert werden müsste und der Druck auch ohne Umweg funktionieren würde.
Hast du vielleicht das Flying Saucer XHTMLPrintable schon einmal ausprobiert und kannst mir deine Erfahrung damit beschreiben?
Oder weißt du eine Möglichkeit, wie man die erzeugten PDFs dann gleich drucken kann (ohne sie öffnen zu müssen)?
Danke!


PS: Mein XHTML Code ist z.B. folgendermaßen aufgebaut:


```
String html =
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>"+
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"+
"<html xmlns=\"http://www.w3.org/1999/xhtml\">"+
"<head>"+
"<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\" />"+
"<title>Test</title>"+
"</head>"+
"<body>"+
"TEST"+
"</body>"+
"</html>";
```


----------



## Ullenboom (1. Nov 2007)

Also zumindest Postscript (im inputStream) kann man so an den Standarddrucker schicken:

```
InputStream inputStream = ...;
Doc doc = new SimpleDoc( inputStream, DocFlavor.INPUT_STREAM.AUTOSENSE, null );
PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
attributes.add( MediaSizeName.ISO_A4 );
attributes.add( new Copies(1) );
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
DocPrintJob docPrintJob = printService.createPrintJob();
try
{
  docPrintJob.print( doc, attributes );
}
catch ( PrintException e )
{
  e.printStackTrace();
}
```
Jetzt musst du nur noch mit einem Konverter PDF->PS bringen 

Grüße

 Christian


----------



## Guest (2. Nov 2007)

Hi!

Hab jetzt eine Lösung gefunden, ist zwar ein bisschen umständlich, aber funktionieren tuts. Für die, die es interessiert:

Mit Flying Saucer wird das XHTML zu einem Document 'gerendert'
Danach erzeuge ich ein PDF mit iText
Und schließlich kann ich das PDF mit dem *Adobe Acrobat Reader for Java* anzeigen und drucken. Das tolle ist, dass die Anzeige auch beispielsweise zoomen unterstützt. Theoretisch kann man dann auch noch Optionen wie das Öfnen von Dokumenten verbieten, das funktioniert bis jetzt bei mir noch nicht....
aber sonst bin ich eigentlich sehr zufrieden.
MFG


----------



## &gt;wintermute&lt; (7. Nov 2007)

Ullenboom hat gesagt.:
			
		

> Also zumindest Postscript (im inputStream) kann man so an den Standarddrucker schicken:
> 
> Jetzt musst du nur noch mit einem Konverter PDF->PS bringen
> 
> ...




Kennst du einen Postscript-Ersteller? Sollte einfach und frei sein, ob PS direkt aus HTML oder aus PDF erstellt wird, wäre mir egal.
Danke! MFG


----------



## &gt;wintermute&lt; (9. Nov 2007)

Hi!

Leider hat sich der Adobe Viewer als Irrtum entpuppt. Der druckt nämlich nur weiße Seiten.....
Damit steh ich wieder am Anfang  :? 

Wie erstellt ihr Formulare zur Laufzeit? Also irgendwie formatierten Text, den man dann ausdrucken kann?

Danke, mfg


----------



## Guest (14. Nov 2007)

Hi,
ich arbeite mit XHTMLRenderer zum drucken und generieren von PDFs. Es gab eine Regression bei der version .7. Mittlerweile funktioniert das Drucken wieder, man muss sich aber die aktuelle version aus dem CVS ziehen. Wenn Du Deine Mail-Adresse hinterlässt, dann kann ich Dir eine jar mit der aktuellen version schicken, die drucken kann. Ansonsten findest Du die Hinweise in der Developer-Mailing-Liste im Projekt dort. Ab dem 8pre2 sollte es auch offiziell funktionieren.

Ciao,
  Wolfgang

P.S.: Das Drucken klappt. schöner wird der Ausdruck aber beim Drucken des PDF mt Adobe Acrobat.


----------



## &gt;wintermute&lt; (14. Nov 2007)

Anonymous hat gesagt.:
			
		

> Hi,
> ich arbeite mit XHTMLRenderer zum drucken und generieren von PDFs. Es gab eine Regression bei der version .7. Mittlerweile funktioniert das Drucken wieder, man muss sich aber die aktuelle version aus dem CVS ziehen. Wenn Du Deine Mail-Adresse hinterlässt, dann kann ich Dir eine jar mit der aktuellen version schicken, die drucken kann. Ansonsten findest Du die Hinweise in der Developer-Mailing-Liste im Projekt dort. Ab dem 8pre2 sollte es auch offiziell funktionieren.
> 
> Ciao,
> ...



Hey, vielen Dank!!! Das klingt schon brauchbar......

Würd auch gern auf dein Angebot zurückkommen. Hast du einen Usernamen, damit ich dir eine PM mit der Adresse schicken kann?


----------



## Wolfgang Lenhard (14. Nov 2007)

Sorry, war vorhin nicht eingeloggt.
Username: Wolfgang Lenhard (wolfgang(ääät)lenhard.info)


----------



## &gt;wintermute&lt; (15. Nov 2007)

Hi!
Leider funktioniert das Drucken bei mir immer noch nicht. Ich bekomme immer die Fehlermeldung: Content is not allowed in Prolog.
Allerdings wird das Dokument am Bildschirm dargestellt und validator.w3.org sagt mir auch, dass mein Code ok ist. Fällt euch was dazu ein?

PS: Code ist z.B. (von Selfhtml entnommen):

```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<title>Wenn HTML zu XHTML wird</title>
</head>
<body>

<h1><a name="start" id="start">Wenn HTML zu XHTML wird</a></h1>



Dann m&ssen alle Elemente mit Inhalt ein End-Tag haben.</p>



Leere Elemente
m&ssen einen Schr&gstrich am Ende haben.</p>

<hr noshade="noshade" />


Leere Attribute erhalten ihren eigenen Namen als Wert zugewiesen.</p>



[url="#start"]Verweise zu Ankern[/url] springen zum Zielelement
aufgrund des id-Attributs, nicht das name-Attributs.</p>

<script type="text/javascript" src="zeitstempel.js"></script>


</body>
</html>
```


----------



## Wolfgang Lenhard (15. Nov 2007)

Hi Wintermute,
hast Du den Code zum Drucken verwendet, den ich Dir geschickt habe? Das Ganze ist natürlich Beta und noch nicht absolut stabil. Wenn Du etwas am PrinterJob veränderst, und sei es nur den Namen desJobs zu ändern, dann können sich Probleme ergeben.
Hast Du die richtige Jar im Classpath?
Die Umlaute kommen mir etwas verdächtigvor.
Klappt das Drucken generell nicht, oder nur in Bezug auf Deine Xhtml-Datei. Was ist mit den Beispielen von FlyingSaucer?

Ciao,
   Wolfgang


----------



## &gt;wintermute&lt; (15. Nov 2007)

Ok, jetzt hab ichs..... Ich darf nicht wie gewohnt mit DocumentBuilderFactory ein Dokument erstellen, und auch nicht einfach ein File übergeben, sondern muss 
	
	
	
	





```
new File("./test.html").toURI().toString()
```
 verwenden..... bisschen seltsam   
Jetzt muss ich es nur noch schaffen, auch aus Strings den Inhalt zu beziehen, weil eine Datei zu schreiben, um sie dann wieder auszulesen ist schon sehr ineffizient  :lol: 
Ich sag jedenfalls DANKE für deine Hilfe!!
MFG, Harald


----------

