Avatar billede eksperten1 Nybegynder
01. oktober 2008 - 14:09 Der er 7 kommentarer

Brug DOTNET componenter fra PHP

Hej.
Jeg har downloadet ABCpdf 6.1 .net fra www.websupergoo.com.
Jeg har installeret den og den ser ud til at fungere.

Jeg er ude på at benytte det fra PHP (duh!) men har ingen ide om hvordan jeg opretter forbindelsen til componentet.

Jeg har tidligere brugt COM udgaven af samme object uden problemer - men .net udgaven kan lige lidt mere - self noget jeg skal bruge.

Er der en venlig sjæl som kan hjælpe mig med at udfylde hullerne...

$obj = new DOTNET("assembly", "classname")

Altså : Hvad er "assembly" og hvad er "classname" ??

Jeg smider lige lidt kode eksempel fra websupergoo ind ::
// ===========================================================================
//      ©2006 WebSupergoo. All rights reserved.
// ===========================================================================

using System;
using System.IO;
using WebSupergoo.ABCpdf6;
using WebSupergoo.ABCpdf6.Objects;


namespace TaggedPDF {
        /// <summary>
        /// Startup class for calling tagged pdf tests
        /// Tests include xml converter example and hardcoded tagged
        /// pdf creation.
        /// - Simple example shows how to generate tagged pdf files using ABCPdf
        /// - Xml converter transforms simple html-like xml format to tagged pdf.
        /// </summary>
        class TaggedPDFApp {
                /// <summary>
                /// The main entry point for the application.
                /// </summary>
                [STAThread]
                static void Main(string[] args) {
                        string theBase = Directory.GetParent( Directory.GetCurrentDirectory() ).Parent.FullName;
                        string theIn = theBase + @"\Input\";
                        string theOut = theBase + @"\Output\";

                        // simple example first
                        SimpleExample(theIn, theOut);
       
                        // then xml based example
                        string[] theFiles = Directory.GetFiles(theIn);
                        foreach (string inFile in theFiles) {
                                string outFile = theOut + Path.GetFileNameWithoutExtension(inFile) + ".pdf";
                                XmlConverter converter = new XmlConverter();
                                converter.Convert(inFile, outFile);
                        }
                }

                /// <summary>
                /// Example of a dynamically created tagged pdf document 
                /// </summary>
                static public void SimpleExample(string inputDirectory, string outputDirectory) {
                        // Create new doc and tagged content for it
                        Doc theDoc = new Doc();
                        TaggedContent theContent = new TaggedContent(theDoc);

                        //Add a container tag
                        theContent.BeginTaggedItem("Container");

                        //Add a paragraph of text
                        theDoc.Rect.Inset(40, 40);
                        theDoc.FontSize = 20;
                        theContent.AddTaggedText("P", "Tagged PDF (PDF 1.4) is a stylized use of PDF that builds on the logical structure framework described in Section 10.6, Logical Structure. It defines a set of standard structure types and attributes that allow page content (text, graphics, andimages) to be extracted and reused for other purposes.");

                        //Add image
                        theDoc.Rect.String = "300 100 300 100";
                        theContent.AddTaggedImage("Image", inputDirectory + @"images\aster1.jpg");

                        //Add some rotated text marked with header tag (H1)
                        theDoc.Rect.String = theDoc.MediaBox.String;
                        theDoc.Rect.Magnify(0.5, 0.5);
                        theDoc.FontSize = 30;
                        theDoc.Transform.Rotate(45, theDoc.Pos.X, theDoc.Pos.Y);
                        theContent.AddTaggedText("H1", "Gallia est omnis divisa in partes tres, quarum unam incolunt Belgae, aliam Aquitani, tertiam qui ipsorum lingua Celtae, nostra Galli appellantur.");
                        theDoc.Transform.Reset();

                        //Close container
                        theContent.EndTaggedItem();

                        // Dump tagged content and save pdf file
                        theContent.AddToDoc();
                        theDoc.Save(outputDirectory + "Simple.pdf");
                }
        }
}

//mark
Avatar billede jakobdo Ekspert
01. oktober 2008 - 14:25 #1
Er det noget som fpdf ikke kan klare ?
Avatar billede michael_stim Ekspert
01. oktober 2008 - 14:27 #2
assembly er vel det der hed dll i gamle dage. Og classname, er som det siger: Navnet på den klasse der bruges.
Avatar billede eksperten1 Nybegynder
01. oktober 2008 - 14:34 #3
jakobdo > ja det er kompleks rendering af pdf->jpg, samt doc->jpg etc.
michael_stim > tjaaa. Jeg sidder og roder med $pdf = new DOTNET("ABCpdf6CE.dll", "Doc"); men uden held - har afprøvet forskellige varianter af samme men uden held.

Får en fejl : Failed to instantiate .Net object [CreateInstance]. Den angivne fil kunne ikke findes
Avatar billede eksperten1 Nybegynder
01. oktober 2008 - 14:35 #4
Det her er fra abcpdf manualen :
ABCpdf .NET is made up of two components.

ABCpdfCE6.DLL is the core engine. It incorporates our proprietary Direct to PDF technology and is designed for high performance PDF manipulation in a multithreaded environment.

ABCpdf.DLL is a .NET tier comprising the visible interface and less speed critical code. When the assembly is loaded it locates and loads the core engine establishing a direct high speed link between the two components.

The .NET tier is placed in the GAC so that you can reference ABCpdf .NET from any of your projects. However should you require you can always copy both DLLs to the bin directory of your application.

You need to add a reference to ABCpdf from your Visual Studio Project.

This tells Visual Studio to link the ABCpdf assembly into the build.

If you are not using Visual Studio you will need to consult the documentation for your chosen development environment.

There are four public namespaces in ABCpdf. You can reference these using the following directives.

[C#]

using WebSupergoo.ABCpdf6;
using WebSupergoo.ABCpdf6.Objects;
using WebSupergoo.ABCpdf6.Atoms;
using WebSupergoo.ABCpdf6.Operations;


[Visual Basic]

Imports WebSupergoo.ABCpdf6
Imports WebSupergoo.ABCpdf6.Objects
Imports WebSupergoo.ABCpdf6.Atoms
Imports WebSupergoo.ABCpdf6.Operations

The ABCpdf6 namespace contains the objects you will use for page layout. Most of the time it is the only namespace you will need.

The Objects namespace allows you to access and manipulate content you've already added. You may use this namespace for complex operations in which the standard page layout functionality requires some modification.

The Atoms namespace allows you low level access to the raw PDF data structures. You are unlikely to use objects from this namespace unless you are writing very low level code.

The Operations namespace allows you to perform complex operations with multiple parameters and callbacks.


This is some simple example code. All it does is report the ABCpdf license information.

[C#]

Doc doc = new Doc();
Response.Write("License: " + doc.License + "<br>");


[Visual Basic]

Dim doc As New Doc()
Response.Write("License: " & doc.License & "<br>")
Avatar billede eksperten1 Nybegynder
01. oktober 2008 - 14:39 #5
Hmm - gad vide om jeg har .Net frameworket installeret - kører Vista Business - men tror jeg af installerede det for et stykke tid siden :-O
Avatar billede eksperten1 Nybegynder
01. oktober 2008 - 14:50 #6
Det havde jeg ikke - men det gjorde ikke den store forskel :-((
Avatar billede eksperten1 Nybegynder
02. oktober 2008 - 10:04 #7
Det her kommer fra php.net :
$x = new DOTNET('The.Assembly.Name, Version=X.X.X.X, Culture=neutral, PublicKeyToken=ZZZZZZZZZZZZ', 'The.Class.Name');

Kan en venlig sjæl mon gennemskue hvordan det skal udfyldes (hvor jeg får de værdier fra)

mvh
Mark
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester