J'ai besoin de la bibliothèque .NET pour générer des documents imprimables. Les utilisateurs doivent pouvoir imprimer exactement le même document qu'elles voient à l'aide de mon application ou à l'aide de l'outil externe (comme Adobe Acrobat Reader). Il ne doit pas nécessairement être bibliothèque pour générer des documents PDF, tout format de document qui satisfait au-dessus de la condition. p>
J'ai besoin de la bibliothèque pour prendre en charge les scénarios suivants: P>
scénario 1: p>
scénario 2: p>
Remarque pour le deuxième scénario: em> J'ai du texte avec certaines pièces dans Superscript - Exemple scénario 3: p>
La bibliothèque doit être gratuite et non GPL (LGPL est OK). Y a-t-il quelque chose qui me permet de faire ce dont j'ai besoin? Peut-il être fait avec ItextShaarp (version 4.1.6 qui est LGPL non AGPL)? Ou peut-être avec un document fixe? Merci pour toutes suggestions. P>
J'ai besoin de documents complexes de composition dans l'application .NET (C #) pour l'utilisateur. L'utilisation principale de ces documents sera destinée à l'impression. p>
Les documents contiendront du texte et des graphiques générés simples. La disposition du texte et du graphique sera complexe et doit être calculée (dans une autre manière la position du texte dans le document doit être contrôlée par mon code, elle ne sera pas effectuée automatiquement par la bibliothèque choisie). P>
Voici mes exigences de l'API: P>
Il n'est pas nécessaire d'être bibliothèque pour la création de documents PDF - tout autre "ce que vous voyez est ce qui sera imprimé" le format de document fera également le format de document. S'il y a un composant WPF pouvant afficher de tels documents, c'est un avantage. Je sais qu'il y a iTextShaRP mais n'est pas facile à atteindre 4. Exigence avec iTextShaRP. STRUT> Certaines bibliothèques de génération PDF satisfaisant aux exigences ci-dessus seront également une excellente solution. p>
Merci pour toute suggestion, je suis également heureux de fournir des détails ou une explication plus claire. P>
AAA {V-Superscript Texte} BBB CODE> (où le texte dans
{} < / Code> Bretelles est Superscript). La bibliothèque doit être capable d'imprimer ce texte en utilisant Correction Kenting . Sans le désir de droite, il y aura le même écart entre le dernier
A code> et le premier Superscript
V code> comme entre le dernier Superscript
t code> et premier
b code>. Pour l'utilisateur, il ressemblera à un espace entre
A code> et superscript
v code> mais aucun espace après la dernière lettre Superscript. Donc, le texte sera laid. Si la bibliothèque doit gérer cela correctement, la méthode permettrait d'imprimer le texte intégral
AAA {V-Superscript Text} BBB code> à la fois avec des spécifications qu'une partie de celle-ci est en superscript. Ensuite, cela utiliserait la corrontation correcte entre le texte normal et la superscript. P>
7 Réponses :
Pour ce que ça vaut la peine, je pense que itexthaparpe est le plus facile des tas. Vous pouvez faire ce que vous voulez dans tous, mais ils ont chacun des avantages et des inconvénients. P>
Latex: J'ai besoin d'un accès programmatique à la largeur des chaînes qui figureront dans mon document pour calculer la mise en page. Cela ne peut pas être fait avec du latex. HTML: Où est-ce que je reçois la largeur des chaînes? Ouvrez XML - voir les commentaires précédents à la question originale.
Je suis loin d'un expert en latex, mais je suis sûr que vous pouvez faire tout ce que vous voulez. Vous pouvez spécifier la largeur d'un nœud comme décrit ici: tex.stackexchange.com/questions/7660/... HTML: polices de contrôle avec CSS et calculer la largeur des chaînes basées sur la longueur et Informations de la police. Ouvrir XML: Le SDK que j'ai lié est très riche, je suis sûr que vous pouvez faire ce dont vous avez besoin. Comme je l'ai dit, vous pouvez faire ce dont vous avez besoin avec toutes les bibliothèques, cela peut nécessiter une créativité et un travail acharné. Je ne pense pas qu'il y ait un moyen facile de sortir ici.
Je sais très bien ce qui peut être fait en latex et ce qui ne peut pas être fait. Vous pouvez utiliser une largeur d'informations de certaines chaînes dans le latex lui-même, mais vous ne pouvez pas y accéder à l'extérieur du code .NET. Je ne peux pas laisser la latex à faire la mise en page seule sans .net parce que ma mise en page est trop complexe pour le latex - j'ai besoin d'une langue de programmation complète pour la calculer. Et non, vous ne pouvez rien faire de votre choix en latex. C'est ce que vous ne pouvez pas faire: Stackoverflow.com/questions/2599644/... . Et c'est la raison pour laquelle je ne peux pas l'utiliser.
Je ne comprends toujours pas comment obtenir la largeur des chaînes dans HTML ... sur la base de quelles informations de police? Si j'utilise des informations de la police .NET, la largeur ne sera jamais la même que celle montrée dans HTML. Je ne suis pas sûr à 100% mais je parierais qu'il y a différents kingning au moins ... et HTML n'est pas une bonne solution pour les documents générés par programmation et pour l'impression de toute façon.
Comme dans, vous pouvez mesurer la taille de la taille de la police: 12PX Courrier Nouveau "Hello World" String est puis base à vos calculs à ce sujet. Quoi qu'il en soit, j'ai donné plusieurs autres options. J'espère qu'ils ont aidé.
Voici un article sur la construction d'objets fixaDocument sur MSDN. < / p>
Si vous utilisez WPF, vous souhaitez créer des documents de qualité d'impression, les technologies fixesDocument et XPS intégrées sont probablement ce que vous devriez apprendre. Et puisque vous pouvez éventuellement accéder à l'ensemble de l'article fixe dans le modèle d'objet, il peut également vous indiquer vos numéros de largeur. Je n'ai pas encore expérimenté cela. P>
Eh bien avant de décider de l'utiliser, j'ai besoin de savoir qu'il est possible de faire ce que je dois faire avec ça. J'ai donc besoin de savoir comment obtenir des informations sur la largeur de texte et comment est-il possible de composer le super script. Et comment est-il possible de mesurer le texte de super script.
Notre produit, PDFone .NET peut répondre à vos besoins. Il est livré avec une licence commerciale libre de droits. P>
PDFone .NET est également livré avec un composant PDF Imprimante et un composant Viewer PDF. P>
Disclaimer: Je travaille pour Gnostice. P>
+1 bonne réponse. Cependant, lorsque vous écrivez 3. Que ce qui apparaît comme Superscript, c'est juste un autre texte dans une autre position, je pense que ce n'est pas ce que je désire. Si je n'aijoune que du texte plus petit décalé comme Superscript, il semblera laids car il n'y aura pas de kernage entre le texte normal et le Superscript. Considérant exemple A ^ v code> Il y aura beaucoup d'espace entre
A code> et Superscript
v code>. Dans un autre cas
e ^ b code> Il y aura beaucoup moins d'espace alors dans le cas précédent. Donc, je n'ai pas besoin de positionner correctement Superscript sans information de fondre. Et puis j'ai aussi besoin d'informations pour le mesurer.
Je dois me corriger concernant les textouts Superscript et Indibat. J'ai référé cette question à nos développeurs (post-réponse) et ils disent que PDF ne nécessite pas de textouts séparés, c'est-à-dire qu'il peut atteindre un seul texte. Nous ajouterons un soutien à de telles chaînes dans les versions à venir. Actuellement, nos produits nécessiteraient des textes séparés.
Vous pouvez regarder bibliothèque docotic.pdf (Disclaimer: Je travaille pour miracle). Il possède une API conviviale et un bon ensemble d'échantillons que vous pouvez visualiser en ligne ou exécuter une application Sample Viewer. P>
En outre, il satisfait à vos besoins: P>
Vous pouvez utiliser PDFCANVAS.MEASURETEXT () Méthode pour Ceci. p>
Il existe de nombreuses surcharges qui permettent de montrer du texte en position ou dans une zone arbitraire.
http://bitmiracle.com/pdf-library/help/pdfcanvas.Drawstring. ASPX
http://bitmiracle.com/pdf-library/help/pdfcanvas.drawtext. ASPX P>
La propriété pdfcanvas.textrise permet d'afficher du texte Superscript. Vous pouvez l'utiliser en combinaison avec pdfcanvas.fontsize propriété pour contrôler une taille de texte Superscript. L'échantillon: http://bitmiracle.com/pdf-library/help/text-rise. ASPX P>
Si vous utilisez différentes polices ou taille de police du texte Superscript, l'appel direct de PDFCanvas.MeasureText () produira des résultats incorrects. P>
Il y a des solutions de contournement: p>
-Measure Chaque partie de la chaîne dessinée avec différentes polices séparément, puis résumez toutes les largeurs. P>
-Si vous voulez obtenir la largeur du texte dessiné, vous pouvez simplement soustraire la position de texte initiale de la position de texte finale après le dessin. P>
pris en charge. Regardez ces échantillons:
https://github.com/bitmiracle/docotic.pdf. Échantillons / arbre / maître / échantillons / graphiques
https://github.com/bitmiracle/docotic.pdf. Échantillons / arbre / maître / échantillons / images p>
Le composant PDF Viewer est dans nos plans, mais actuellement docotic.pdf n'offre pas de telles fonctionnalités. P>
https://bitmiracle.com/pdf-library/convert-pdf- to-image.aspx
https://bitmiracle.com/pdf-library/Draw-print-pdf. ASPX P>
Y a-t-il un endroit où je peux voir la sortie de cet exemple pour Superscript que vous avez fourni: bitmiracle.com/pdf-library/help/text-rise.aspx ? Avez-vous une version d'essai / démo / gpl gratuite ou quelque chose que je peux essayer avant de payer?
Bien sûr. Vous pouvez télécharger et évaluer la docotic . Il est livré avec un sample Viewer et un ensemble d'échantillons pour Visual Studio 2005-2010. La version d'évaluation a des limitations, vous pouvez lire des détails ici
Plutôt que de chercher d'autres bibliothèques, que diriez-vous de rechercher un meilleur moyen de calculer la largeur du texte de taille / style mixte?
ColumnText colTx = new ColumnText(contByte); // paragraphs are phrases. colTx.addText(phraseWithSuperAndSubScriptStuff); colTx.setSimpleColumn(llx, lly, urx, ury); colTx.go();
@Mark Storer: Mon problème avec ItextShaparpe est que lorsque vous souhaitez avoir du texte en Superscript qui suit après texte qui n'est pas en superscript. ITEXTSTHARP fait de la bonne fusion lorsque vous l'utilisez de manière standard. Mais lorsque vous souhaitez également positionner ce texte qui inclut Superscript sur la page, vous devez utiliser pdfcontentbyte code>. Lorsque vous l'utilisez, je n'ai pas trouvé le moyen d'imprimer un texte complexe qui inclut Superscript à la fois. Je pense que cela ne permet d'imprimer que d'imprimer un morceau de texte dans l'heure. Je ne peux pas mesurer le texte avec SuperScript Prise en compte et ensuite la mettre sur la position de la page ...
... sans le diviser en morceaux et imprimer des morceaux séparés sur la page. Mais cette façon je lâche la fouton entre ces morceaux (à la frontière entre le texte Superscript et non-Superscript). Et donc le résultat est le texte, soit mauvais (sans kernage avant Superscript), mais je peux le mesurer et imprimer sur une position spécifiée - ou cela semble bon et je peux le mesurer, mais je ne peux pas l'imprimer en position personnalisée sur la page ( Je ne peux pas utiliser columtext code> avec
pdfcontentbyte code>). Je peux télécharger la dernière version d'ItextShaarp qui n'est pas un problème. Maintenant, j'utilise la version qui ressemble à 1 an.
@Mark Storer, ce n'est que maintenant que j'ai mentionné que vous avez édité votre réponse. Vous avez compris mes commentaires correctement. Il y avait une faute de frappe mais vous avez raison. À propos de Krening Entre Texte normal et Superscript: Dernière fois où je testais comment imprimer du texte contenant des pièces normales et superscript avec pdfcontentbyte code> (afin que je puisse l'imprimer dans un endroit arbitraire) J'ai suivi: imprimé Texte normal
Texte normal code> au
[30, 30] code>. Mesuré
texte normal code> à l'aide de
basefont.getwidthpointkerned code>. Disons que la valeur renvoyée était
101 code>. Donc, j'ai imprimé partie SuperScript Pièce
Superscript Texte Code> à [131, 30] en utilisant la même ...
... famille de polices mais plus petite taille avec un ensemble de montée de texte. Mais le résultat n'a pas été beau. En particulier, il n'était pas le même que le résultat produit lorsque je n'ai pas utilisé pdfcontentbyte code> mais
paragraphe code> composé de 2 morceaux (
texte normal code> et < Code> Texte de Superscript Code> Lorsque le second chunk a été défini sur Superscript - il y a un moyen de le faire, mais je ne me souviens pas de noms de méthodes ...). Le résultat produit lors de l'utilisation de paragraphe code> au lieu de
pdfcontentbyte code> avait l'air bien et c'était en fait la pensée que je voulais. Il y avait un faible espace entre
texte normal code> et
texte Superscript code>. Je pensais que c'était parce que ...
... Paragraphe Code> Utilisé Kingning pour calculer la distance entre ces morceaux (
texte normal code> et
texte Superscript code>). Mais
paragraphe code> ne peut pas être utilisé avec
pdfcontentbyte code> au moins je n'ai pas trouvé de moyen de le faire. Je ne peux donc pas imprimer
paragraphe code> dans une position arbitraire. C'est pourquoi je voulais kerning entre le texte normal et la superscript. Si le texte laid était là depuis une autre raison, je veux juste avoir les mêmes résultats (comme avec le paragraphe code>) sur l'emplacement arbitraire.
@Mark Storer: Eh bien, je veux avarder la prime et votre dernier édition pourrait très bien être la solution que je recherche. Je n'ai pas le temps de tester si cela fait vraiment ce que je veux - Bounty est terminé en 8 minutes. Je vais tester votre suggestion et suggestions des autres plus tard et éventuellement accepter de répondre ou définir une nouvelle prime si le problème n'est pas résolu. Merci et aussi merci à tous les autres qui ont posté des réponses.
Je pense que vous pourriez être impérieux votre problème, tandis que WPF a de grandes capacités d'impression. Vous pouvez imprimer n'importe quel visuel (les visuels sont presque toutes les classes WPF) exactement comme vous les voyez à l'écran de manière très simple. Il y a un bon tutoriel ici: http://www.switchsonthecode.com/tatudials/printing- in-wpf p>
Ça a l'air bien mais comment puis-je avoir du texte avec Superscript dans WPF? Je ne pense pas qu'il soit possible d'avoir une étiquette code> code> qui comporte certaines parties du texte dans Superscript (et Kerned). Et comment puis-je mesurer le texte alors? Juste en obtenant la valeur de accuisalwidth code> de l'étiquette code> code>?
Bonjour, je ne l'ai pas essayé moi-même, mais je pense qu'ici est une solution à Superscript mêlée avec du texte normal: Stackoverflow.com/Questtions/2095583/... . Et pour la largeur, oui, c'est plus ou moins aussi facile. WPF peut mesurer la largeur de tout visuel et vous l'obtenez de ses propriétés. J'ai codé quelque chose de similaire mais je ne l'ai pas ici. Je vais vérifier plus tard à la maison. Bonne chance!
@tinchou: Bon lien! Encore une fois, j'aime plus et plus ... J'ai été presque décidé d'utiliser itextShaarp Essayez d'obtenir les suggestions de Mark Storer, mais maintenant je le reconsidère. Tout code que vous pourriez fournir serait extrêmement utile. Les visuels peuvent être convertis en
fixdocument code> aussi c'est bon?
Salut encore, Dasto. Je pense que vous devriez essayer cela, il ne faudra pas longtemps pour voir à quel point c'est facile. Bien que, il existe quelques limitations avec TYPO Variantes: premièrement, vous avez besoin de polices OpenType (comme Palatino). Vous pouvez lire la description ici: MSDN.MicRosoft .com / fr-nous / bibliothèque / ... et malheureusement, il y a un bug terrible: connect.microsoft.com/visualstudio/feedback/details/545057/... J'ai aussi vérifié mon code et je viens d'utiliser une propriété de largeur de formatée
Et enfin, comme vous utiliserez la fenêtre d'impression Windows commune, vous aurez le choix à «Imprimer» à un document XPS. (J'avais des problèmes de marge avec l'impression à XPS, mais je ne les ai jamais résolues parce que mon application était pour une impression réelle, et elle s'est bien déroulée). (Désolé, je me rends compte que j'écris terriblement mal et court!)
@tinchou +1 Si j'avais ce commentaire hier, il me ferait sauver 3 heures d'expérimentation, de lunettes, etc. :( cependant j'ai réussi à obtenir un effet "Superscript" en ayant span code> intérieur
textBlock < / code> coting tout mon texte. Je définir simplement
baselinealignment = "top" code> sur ce
tann code> et je définit son
fontsize code> pour être inférieur à l'entourage Texte. Cela fonctionne pour toutes les polices et même pour les nombres simples, mais cela n'a pas l'air exactement comme je le veux. Je vais poser une question distincte à ce sujet (si vous souhaitez répondre, vérifiez simplement mon profil de temps en temps et filtrerai Questions par Tag Superscript i>).
@tinchou aussi je ne comprends pas ce qui est formatédtext code> pour et je ne sais pas comment l'utiliser. J'ai vu des exemples qui semblaient vraiment difficiles. Je n'ai pas compris. On dirait que c'est une API très faible que je lie généralement d'éviter.
On dirait que vous devez avoir une certaine expérience dans GDI +.
J'ai travaillé pour une société de prêt hypothécaire et ils sont très particulièrement particuliers sur la manière dont ils veulent que leurs rapports soient aménagés. Jusqu'à la précision de pixels. Malheureusement, GDI + ne mesure pas très bien le texte. Par conséquent, votre meilleure alternative serait d'utiliser Windows API P>
[DllImport("gdi32.dll")] static extern bool GetTextExtentPoint(IntPtr hdc, string lpString, int cbString, ref Size lpSize);
+1 Merci c'est beau mais comme dans le cas d'autres réponses, je ne vois pas comment faire scénario 2 de ma réponse avec GDI +. Vous avez fourni une réponse sur la façon de mesurer et d'imprimer du texte normal, comment mesurer et imprimer du texte Superscript mais aucun moyen de mesurer et d'imprimer des imprimer ensemble et Kerned ensemble b> (voir la note du scénario 2). S'il y a une manière que je ne vois pas, veuillez fournir un exemple de code simple / lien de méthode / description comment faire.
Je suppose que la différence de texte est que le texte (Super / Sub) Script a une taille différente puis le texte normal. GDI + vous donne les outils pour faire la peinture. Vous devrez faire l'analyse des demandes et mesurer vos chaînes, alors vous pouvez les dessiner où vous voulez. Ma recommandation est de tirer le premier texte normal, puis du texte Super ou de l'indice, et enfin le prochain ensemble de texte normal. C'est mon avis que c'est ce que toute autre application fera. Mais cela vous donnera le plus de contrôle sur votre produit.
Avez-vous regardé xps / xpsdocumentwriter / etc. encore?
@Logan Capaldo: Ce nom me semble familier ... S'il s'agit de ce format qui a un contrôle de WPF natif pour l'afficher que je l'ai vu il y a quelque temps. Mais je n'ai pas compris que s'il existe un moyen simple de générer de tels documents dans WPF. J'ai des questions sans réponses à ce sujet ici: Stackoverflow.com / Questions / 4634445 / How-To-Work-with-fixpa ge .
@Logan Capaldo: Mais le document XPS n'est pas corrigé? Donc, il n'affiche pas exactement la même mise en page que sera imprimée?
@drasto: Wikipedia dit "Comme le format PDF de Adobe Systems, XPS est un format de document de mise en page fixe conçu pour préserver la fidélité du document, fournissant une apparence de document indépendante de l'appareil." Semble comme ce que vous avez demandé.
@Martinho Fernandes: Oui, on ressemble à ça. Je ne sais tout simplement pas s'il propose également des API pour créer des documents qui me permettent de faire toutes les réflexions décrites dans ma question ...
J'ai fait du gogling et il semble qu'il n'y ait pas de tutoriel ni de ressource sur la manière de générer des documents. Il y a des réponses sur de sorte que montre comment créer des documents XPS à partir de certains
fixePage code> s mais je ne sais toujours pas comment créer
fixepage code> avec du contenu de .NET. Ma question Stackoverflow.com/questions/4634445/how-to -La-à-point-with-fixpa ge est toujours sans réponse.
Modification de ma réponse à nouveau.