Importieren/ Inhalt eines aus einer externen Markierung erstellten Wissenselements

SirPounce hinzugefügt 2 Jahren her
bekannt

Liebes Citavi-Team,

Citavi 6 kann weiterhin nicht zuverlässig Markierungen importieren, welche in externen PDF-Readern erstellt wurden. Ich erlaube mir meine alte Problembeschreibung zu kopieren, und stelle das nur hier ins Forum, damit ich das Problem weiterverfolgen kann:


"Man nehme das folgende Dokument: http://www.gov.scot/Publications/2015/07/8416/downloads

Nun möchte ich Tz. 1.04 in ein Citavi-Wissenselement umwandeln.


Markierung in Adobe Acrobat DC, Inhalt des automatisch in den Noteninhalt kopierten Textes


The second provision would allow the holders of corporeal moveable

property deposited with or lent to them to become owner of that property if the

owner (or the owner’s successor) has not been in contact for 50 years.


Inhalt des Citavi-Wissenselement, welches aus Umwandlung der Adobe-Markierung erstellt wurde


p p property deposited with or lent to them to become owner of that property if the 4 The second provision would allow the holders of corporeal moveable p p owner (or the owner’s successor) has not been in contact for 50 years. y p p p


Text markiert in Citavi-Vorschau (ich schaffe es troty verschiedenster Versuche mit Strg, Shift, Textauswahl und recheckiger Textauswahl nicht, die Markierung so zu gestalten, dass die Worte "4 This" nicht markiert werden - eines der Gründe, warum ich dazu neige, Erstanstriche gar nicht mit der PDF-Komponente zu machen)


The second provision would allow the holders of corporeal moveable property deposited with or lent to them to become owner of that property if the owner (or the owner’s successor) has not been in contact for 50 years.4 This"

Das Problem ist in der neuesten Citavi-Version immer noch vorhanden, und gehört in meiner Arbeit immer noch zu den größten Zeitfressern mit Citavi. Am Tablet erstellte Markierungen müssen in Citavi häufig erst gelöscht werden, und dann wieder neu erstellt werden. Das einfache Umwandeln funktioniert schlicht und ergreifend nicht, obwohl kein anderes Programm Probleme damit hat, den markierten Text richtig zu erkennen.


Beste Grüße,

Jan Jakob

Kommentare (6)

Foto
1

Nächste Schritte, auf dem Weg, Zeitverluste zu kompensieren: 2. automatisches Umwandeln der externen Markierungen. 3. Nachträgliches Verbinden von bereits bestehenden Wissenselementen. Wenn alle drei Schritte funktionieren, dann kann man sagen, dass Citavi sinnvoll mit nicht in Citavi erstellten PDF-Annotation umgehen kann.

Foto
1

Hallo Jan Jakob,

vielen Dank für den Hinweis.

Das Problem stellt in diesem Fall die hochgestellte 4 dar, die koordinatenmäßig zwischen den Zeilen steht und die Logik der PDF-Vorschau durcheinanderbringt. Das lässt sich leider nicht ohne Weiteres korrigieren.

Es tut mir leid, Ihnen keine besseren Neuigkeiten übermitteln zu können.

Viele Grüße

Susanne

Foto
1

Das war vor drei Jahren auch die erste Antwort. Erstens war das nur ein Beispiel, es gibt auch andere Fälle, in denen das nicht klappt. Zweitens kann jeder andere PDF-Reader das richtig erkennen, nur Citavi kann das nicht. Drittens erklärt das nicht, warum Citavi aus externen Markierungen totalen Unsinn bastelt mit Buchstaben, welche im Text nicht vorkommen. Viertens habe ich Herrn Pabel im verlinkten Beitrag so verstanden, dass das als Bug ihrerseits anerkannt wurde.

Das schlagende Argument ist für mich, dass nur Citavi hier Probleme hat, wie von mir im verlinkten Beitrag beschrieben, kein anderes Programm hat hier Probleme. Citavi lässt sich schlicht und ergreifend nicht mit anderen PDF-Readern benutzen. Es kann externe Markierugen nicht zuverlässig umwandeln. Das ist m.E. ein erhebliches Manko.

Foto
1

Hallo Jan Jakob

Das ist in der Tat ein seit langem offener Bug (Issue 22017: Externe PDF-Markierungen wurden unter bestimmten Umständen nicht vollständig erkannt). Bei Citavi 5 war die Einschätzung "fixing disproportional"; bei Citavi 6 haben wir den Bug mitgeschleppt - zum einen aus den bekannten Ressourcen-Gründen, zum anderen weil wir ihn zusammen mit anderen PDF-Fragen wieder hervorgeholt haben. Auf der konzeptionellen Ebene rollt der PDF-Zug schon (dazu wird es in Kürze auch eine kleine Umfrage geben), aber auf der programmatischen noch nicht.

Freundliche Grüsse

Peter

Foto
1

Lieber Peter,


das klingt ja weiterhin hoffnungsvoll. Vielleicht wird es auf ewig nur bei meiner Stimme für diesen Bug bleiben, aber "fixing disproportional" überrascht mich doch. Das ist wie gesagt so gut wie jede PDF aus Hein Online, welche von diesem Problem betroffen ist, viele aus Jstor, die meisten, welche von Adobe Acrobat per Clear Scan erstellt wurden. Für mich sind externe Markierungen eine Anweisung, wo ich in Citavi eine Markierung neu erstellen muss, mehr nicht; de facto funktioniert die Zusammenarbeit mit externen Markierungen für mich nicht und hat es noch nie.


Beste Grüße aus dem winterlichen Süden (auch an Susanne, welche gestern Abend leidtragende meiner kurzen E-Mail-Antworten war),

Jan Jakob

Foto
1

... die Grüsse gebe ich gerne an Susanne weiter und die zugesandte PDF hefte ich an den aktuellen internen Diskussions-Thread ;-)

Freundliche Grüsse

Peter

Foto
1

Folgende Beobachtung:

Wenn ich eine Annotation erstelle, welche aus den vorhandenen Quads drei neue Quads berechnet, welche ein bisschen weniger hoch sind, als die vorhandenen Quads, funktioniert die Übernahme des Textes problemlos. Ich habe in Adobe ein Highlight folgender Passage erstellt:

The second provision would allow the holders of corporeal moveable property deposited with or lent to them to become owner of that property if the owner (or the owner’s successor) has not been in contact for 50 years.
Dieses Highlight habe ich in Citavi umgewandelt. Ergebnis:
p p property deposited with or lent to them to become owner of that property if the 4 The second provision would allow the holders of corporeal moveable p p y p p p owner (or the owner’s successor) has not been in contact for 50 years.
Jetzt habe ich eine Annotation erstellt, welche wie folgt auf der vorhandenen Annotation beruht:
public static Annotation CreateTemporaryAnnotation(this Annotation existingAnnotation)
        {
            double scalingFactor = 0.5;

            Location location = existingAnnotation.Location;
            if (location == null) return null;

            List<Quad> existingAnnotationNonContainerQuads = existingAnnotation.Quads.Where(q => q.IsContainer == false).OrderByDescending(q => q.MinY).ToList();

            List<Quad> temporaryAnnotationQuads = new List<Quad>();

            Annotation temporaryAnnotation = new Annotation(location);

            Quad firstQuad;
            Quad secondQuad;
            Quad secondToLastQuad;
            Quad lastQuad;

            double firstQuadHeight;
            double firstQuadMiddleY;
            double newFirstQuadHeight;

            double secondQuadHeight;
            double secondQuadMiddleY;
            double newSecondQuadHeight;

            switch (existingAnnotationNonContainerQuads.Count)
            {
                case 0:
                    return null;
                case 1:
                    firstQuad = existingAnnotationNonContainerQuads[0];

                    firstQuadHeight = firstQuad.MaxY - firstQuad.MinY;
                    firstQuadMiddleY = firstQuad.MaxY - firstQuadHeight / 2;
                    newFirstQuadHeight = firstQuadHeight * scalingFactor;

                    temporaryAnnotationQuads.Add(new Quad(firstQuad.PageIndex, false, firstQuad.X1, firstQuadMiddleY - newFirstQuadHeight / 2, firstQuad.X2, firstQuadMiddleY + newFirstQuadHeight / 2));

                    break;
                case 2:
                    firstQuad = existingAnnotationNonContainerQuads[0];
                    secondQuad = existingAnnotationNonContainerQuads[1];

                    firstQuadHeight = firstQuad.MaxY - firstQuad.MinY;
                    firstQuadMiddleY = firstQuad.MaxY - firstQuadHeight / 2;
                    newFirstQuadHeight = firstQuadHeight * scalingFactor;

                    secondQuadHeight = secondQuad.MaxY - secondQuad.MinY;
                    secondQuadMiddleY = secondQuad.MaxY - secondQuadHeight / 2;
                    newSecondQuadHeight = secondQuadHeight * scalingFactor;

                    temporaryAnnotationQuads.Add(new Quad(firstQuad.PageIndex, false, firstQuad.X1, firstQuadMiddleY - newFirstQuadHeight / 2, firstQuad.X2, firstQuadMiddleY + newFirstQuadHeight / 2));
                    temporaryAnnotationQuads.Add(new Quad(secondQuad.PageIndex, false, secondQuad.X1, secondQuadMiddleY - newSecondQuadHeight / 2, secondQuad.X2, secondQuadMiddleY + newSecondQuadHeight / 2));
                    break;
                default:
                    firstQuad = existingAnnotationNonContainerQuads[0];
                    secondQuad = existingAnnotationNonContainerQuads[1];
                    secondToLastQuad = existingAnnotationNonContainerQuads[existingAnnotationNonContainerQuads.Count - 2];
                    lastQuad = existingAnnotationNonContainerQuads[existingAnnotationNonContainerQuads.Count - 1];

                    firstQuadHeight = firstQuad.MaxY - firstQuad.MinY;
                    firstQuadMiddleY = firstQuad.MaxY - firstQuadHeight / 2;
                    newFirstQuadHeight = firstQuadHeight * scalingFactor;

                    secondQuadHeight = secondQuad.MaxY - secondQuad.MinY;
                    secondQuadMiddleY = secondQuad.MaxY - secondQuadHeight / 2;

                    double secondToLastQuadHeight = secondToLastQuad.MaxY - secondToLastQuad.MinY;
                    double secondToLastQuadMiddleY = secondToLastQuad.MaxY - secondToLastQuadHeight / 2;

                    List<double> maxXValues = new List<double>();

                    maxXValues.Add(secondQuad.MaxX);
                    maxXValues.Add(secondToLastQuad.MaxX);

                    Double newSecondQuadX2 = maxXValues.Max();

                    double lastQuadHeight = lastQuad.MaxY - lastQuad.MinY;
                    double lastQuadMiddleY = lastQuad.MaxY - lastQuadHeight / 2;
                    double newLastQuadHeight = lastQuadHeight * scalingFactor;

                   temporaryAnnotationQuads.Add(new Quad(firstQuad.PageIndex, false, firstQuad.X1, firstQuadMiddleY - newFirstQuadHeight / 2, firstQuad.X2, firstQuadMiddleY + newFirstQuadHeight / 2));

                    temporaryAnnotationQuads.Add(new Quad(secondQuad.PageIndex, false, secondQuad.X1, secondToLastQuad.Y1 + newLastQuadHeight / 2, newSecondQuadX2, secondQuad.Y2 - newFirstQuadHeight / 2));

                   temporaryAnnotationQuads.Add(new Quad(lastQuad.PageIndex, false, lastQuad.X1, lastQuad.Y1 + (lastQuadHeight - newLastQuadHeight) / 2, lastQuad.X2, lastQuad.Y2 - (firstQuadHeight - newFirstQuadHeight) /2));

                    break;
            }

            temporaryAnnotation.Quads = temporaryAnnotationQuads;
            temporaryAnnotation.OriginalColor = System.Drawing.Color.FromArgb(255, 255, 255, 0);
            temporaryAnnotation.Visible = true;

            return temporaryAnnotation;
        }
Die besagte Holzhammermethode. Wenn ich diese Annotation nun in ein Wissenselement umwandele, ist der Text richtig. /466e10089d7678fc198f56482992e340 Für mich persönlich wird es damit fast egal, ob das in Citavi geändert wird oder nicht, wenn ich die Annotationen ohnehin über mein AddOn importiere, wenn, ja wenn, es nicht so wäre, dass das automatisierte Umwandeln der Annotationen nicht funktioniert. Im AddOn wandel ich die Annotationen ja in Wissenselemente um, indem ich per
pdfViewControl.GoToAnnotation(existingAnnotation);
textContent = (TextContent)pdfViewControl.GetSelectedContentFromType(pdfViewControl.GetSelectedContentType(), -1, true, true);
den Textinhalt der Annotation auslese. Das klappt aber mit den neuen Annotationen nicht. Wenn ich diese erstelle und direkt anwähle, kommt kein Text heraus.


                Annotation temporaryAnnotation = existingAnnotation.CreateTemporaryAnnotation();
                location.Annotations.Add(temporaryAnnotation);
                pdfViewControl.OpenDocument(location, location.Address.Resolve().AbsolutePath);
                pdfViewControl.GoToAnnotation(temporaryAnnotation);
                textContent = (TextContent)pdfViewControl.GetSelectedContentFromType(pdfViewControl.GetSelectedContentType(), -1, true, true);
funktioniert nicht, textContent, bleibt leer.

Meine Idee wäre es eigentlich gewesen, diese temporären Annotationen zu erstellen, welche nur genutzt werden, um den richtigen Text zu erhalten, und danach direkt wieder gelöscht werdem, die ursprüngliche Annotation aber diejenige bleibt, welche grafisch dargestellt wird (was meinem Verständnis nach unter anderem deshalb wichtig ist, weil Citavi die Äquivalenz zwischen Citavi- und PDF-Annotationen an der Dimension festmacht, ich kann also nicht einfach die "zu großen" Annotationen wegschmeißen).

Foto
1

(Das meine Methode nicht funktioniert, wenn der Text nicht bündig rechts ist, ist mir inzwischen auch aufgefallen, das lässt sich aber regeln – sie kann auch nicht funktionieren, wenn die Annotation diskontinuierlich sind, oder über mehrere Spalten, oder Seiten gehen. Das finde ich aber alles nicht so schlimm, das passiert im Regelfall ohnehin nicht, weil kaum ein PDF-Reader auf dem Tablet Spalten richtig kann, seitenübergreifend kann keiner, und diskontinuierliche Highlights sind mir mit Readern erzeugt auch noch nicht untergekommen.)

Foto
1

Soweit mein persönliches Interesse an diesem Bug reicht, hat sich das jetzt erledigt. Meine unelegante Holzhammermethode mit den "falschen" Annotationen, welche direkt wieder gelöscht werden, im AddOn funktioniert jetzt (der Trick war es, dass Dokument einmal in der Vorschau neu zu laden). Das war mit Abstand der größte Zeitfresser in der Arbeit mit Citavi in den letzten drei Jahren, und ich bin froh, das für mich gelöst zu haben.

Foto