feat: rebrand to MMD PDF, single corporate theme, and remove original text under an edit
- Services/PdfRedactText.cs: strip text whose origin falls inside a CoverAnnotation from the page content stream at save time, hooked into PdfBurn.DrawAnnotationsIntoDoc. Fixes edited values staying recoverable by text extraction. - Themes/MMD.xaml replaces all thirteen themes; picker and accent strip removed; no dark mode. - Rename KillerPDF -> MMD PDF across code, resources, packaging and locale strings; new icon. - Remove the upstream author credit and the in-app install button.
This commit is contained in:
+10
-10
@@ -10,14 +10,14 @@ $ErrorActionPreference = 'Stop'
|
||||
Set-StrictMode -Version Latest
|
||||
|
||||
$projectDir = Split-Path -Parent $PSScriptRoot
|
||||
$appProject = Join-Path $projectDir 'KillerPDF.csproj'
|
||||
$launcherProject = Join-Path $projectDir 'Packaging\KillerLauncher\KillerLauncher.csproj'
|
||||
$appProject = Join-Path $projectDir 'MmdPdf.csproj'
|
||||
$launcherProject = Join-Path $projectDir 'Packaging\MmdPdfLauncher\MmdPdfLauncher.csproj'
|
||||
$artifactRoot = Join-Path $projectDir "bin\$Configuration\net48\portable-package"
|
||||
$payloadDir = Join-Path $artifactRoot 'payload'
|
||||
$payloadZip = Join-Path $artifactRoot 'payload.zip'
|
||||
$launcherOutput = Join-Path $artifactRoot 'launcher'
|
||||
$publicDir = Join-Path $projectDir "bin\$Configuration\net48\publish"
|
||||
$publicExe = Join-Path $publicDir 'KillerPDF.exe'
|
||||
$publicExe = Join-Path $publicDir 'MmdPdf.exe'
|
||||
|
||||
if (-not $RepackOnly) {
|
||||
if ([IO.Directory]::Exists($artifactRoot)) { [IO.Directory]::Delete($artifactRoot, $true) }
|
||||
@@ -31,10 +31,10 @@ if ([IO.Directory]::Exists($launcherOutput)) { [IO.Directory]::Delete($launcherO
|
||||
$versionXml = [xml](Get-Content -Raw -LiteralPath $appProject)
|
||||
$versionNode = $versionXml.SelectSingleNode('/Project/PropertyGroup/Version')
|
||||
$version = if ($versionNode) { [string]$versionNode.InnerText } else { '' }
|
||||
if (-not $version) { throw 'KillerPDF.csproj has no Version.' }
|
||||
if (-not $version) { throw 'MmdPdf.csproj has no Version.' }
|
||||
|
||||
if (-not $RepackOnly) {
|
||||
Write-Host "==> Building loose KillerPDF payload $version..." -ForegroundColor Cyan
|
||||
Write-Host "==> Building loose MmdPdf payload $version..." -ForegroundColor Cyan
|
||||
& dotnet publish $appProject -c $Configuration `
|
||||
-p:KillerPayloadBuild=true `
|
||||
-p:PublishDir="$payloadDir\"
|
||||
@@ -49,7 +49,7 @@ if (-not $RepackOnly) {
|
||||
# The PDF file-type icon is a loose installed asset even though the application also embeds it.
|
||||
[IO.File]::Copy((Join-Path $projectDir 'Resources\pdf-file.ico'),
|
||||
(Join-Path $payloadDir 'pdf-file.ico'), $true)
|
||||
} elseif (-not [IO.File]::Exists((Join-Path $payloadDir 'KillerPDF.App.exe'))) {
|
||||
} elseif (-not [IO.File]::Exists((Join-Path $payloadDir 'MmdPdf.App.exe'))) {
|
||||
throw 'RepackOnly requested but the prepared payload is missing.'
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ if ($payloadDifference.Count -gt 0) {
|
||||
$details = ($payloadDifference | ForEach-Object { "$($_.SideIndicator) $($_.InputObject)" }) -join [Environment]::NewLine
|
||||
throw "Payload file set changed. Review dependencies and update build\payload-files.txt deliberately:`n$details"
|
||||
}
|
||||
foreach ($required in 'KillerPDF.App.exe', 'pdfium.dll', 'PdfSharpCore.dll', 'System.Text.Json.dll') {
|
||||
foreach ($required in 'MmdPdf.App.exe', 'pdfium.dll', 'PdfSharpCore.dll', 'System.Text.Json.dll') {
|
||||
if ($actualPayloadNames -notcontains $required) {
|
||||
throw "Required loose payload file is missing ($required). Costura/Fody may have run accidentally."
|
||||
}
|
||||
@@ -105,15 +105,15 @@ finally { $zipStream.Dispose() }
|
||||
|
||||
Write-Host "==> Building the public portable launcher..." -ForegroundColor Cyan
|
||||
& dotnet publish $launcherProject -c $Configuration `
|
||||
-p:LauncherAssemblyName=KillerPDF `
|
||||
-p:LauncherAssemblyName=MmdPdf `
|
||||
-p:LauncherVersion=$version `
|
||||
-p:LauncherIcon="$(Join-Path $projectDir 'Resources\kp-icon.ico')" `
|
||||
-p:LauncherIcon="$(Join-Path $projectDir 'Resources\mmd-icon.ico')" `
|
||||
-p:PayloadZip="$payloadZip" `
|
||||
-p:AllowUnsignedInstall="$(!$RequireSignature)" `
|
||||
-p:PublishDir="$launcherOutput\"
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Launcher build failed.' }
|
||||
|
||||
$builtLauncher = Join-Path $launcherOutput 'KillerPDF.exe'
|
||||
$builtLauncher = Join-Path $launcherOutput 'MmdPdf.exe'
|
||||
if (-not [IO.File]::Exists($builtLauncher)) { throw "Launcher output is missing: $builtLauncher" }
|
||||
[IO.File]::Copy($builtLauncher, $publicExe, $true)
|
||||
|
||||
|
||||
@@ -57,18 +57,18 @@ function Read-Trace([string]$Path) {
|
||||
}
|
||||
|
||||
$results = @()
|
||||
$oldTrace = [Environment]::GetEnvironmentVariable('KILLERPDF_STARTUP_TRACE', 'Process')
|
||||
$oldTrace = [Environment]::GetEnvironmentVariable('MMDPDF_STARTUP_TRACE', 'Process')
|
||||
try {
|
||||
for ($i = 1; $i -le $Iterations; $i++) {
|
||||
$trace = Join-Path ([IO.Path]::GetTempPath()) ("killerpdf-startup-{0}.trace" -f [guid]::NewGuid().ToString('N'))
|
||||
[Environment]::SetEnvironmentVariable('KILLERPDF_STARTUP_TRACE', $trace, 'Process')
|
||||
$trace = Join-Path ([IO.Path]::GetTempPath()) ("mmdpdf-startup-{0}.trace" -f [guid]::NewGuid().ToString('N'))
|
||||
[Environment]::SetEnvironmentVariable('MMDPDF_STARTUP_TRACE', $trace, 'Process')
|
||||
$process = Start-Process -FilePath $ExePath -PassThru
|
||||
$launchedUtc = $process.StartTime.ToUniversalTime()
|
||||
$deadline = [datetime]::UtcNow.AddSeconds($TimeoutSeconds)
|
||||
|
||||
try {
|
||||
while ([datetime]::UtcNow -lt $deadline) {
|
||||
if ($process.HasExited) { throw "KillerPDF exited before reaching the ready marker (exit $($process.ExitCode))." }
|
||||
if ($process.HasExited) { throw "MmdPdf exited before reaching the ready marker (exit $($process.ExitCode))." }
|
||||
if ((Test-Path -LiteralPath $trace) -and
|
||||
(Select-String -LiteralPath $trace -SimpleMatch 'MainWindow ready' -Quiet)) { break }
|
||||
Start-Sleep -Milliseconds 25
|
||||
@@ -76,7 +76,7 @@ try {
|
||||
}
|
||||
if (-not (Test-Path -LiteralPath $trace) -or
|
||||
-not (Select-String -LiteralPath $trace -SimpleMatch 'MainWindow ready' -Quiet)) {
|
||||
throw "Timed out after $TimeoutSeconds seconds waiting for KillerPDF startup."
|
||||
throw "Timed out after $TimeoutSeconds seconds waiting for MmdPdf startup."
|
||||
}
|
||||
|
||||
$timing = Read-Trace $trace
|
||||
@@ -98,7 +98,7 @@ try {
|
||||
finally {
|
||||
if ($Launcher -and -not $process.HasExited) {
|
||||
$children = @(Get-CimInstance Win32_Process -ErrorAction SilentlyContinue |
|
||||
Where-Object { $_.ParentProcessId -eq $process.Id -and $_.Name -eq 'KillerPDF.App.exe' })
|
||||
Where-Object { $_.ParentProcessId -eq $process.Id -and $_.Name -eq 'MmdPdf.App.exe' })
|
||||
foreach ($child in $children) {
|
||||
Stop-Process -Id $child.ProcessId -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
@@ -113,7 +113,7 @@ try {
|
||||
}
|
||||
}
|
||||
finally {
|
||||
[Environment]::SetEnvironmentVariable('KILLERPDF_STARTUP_TRACE', $oldTrace, 'Process')
|
||||
[Environment]::SetEnvironmentVariable('MMDPDF_STARTUP_TRACE', $oldTrace, 'Process')
|
||||
}
|
||||
|
||||
$results | Export-Csv -LiteralPath $OutputCsv -NoTypeInformation -Encoding UTF8
|
||||
|
||||
@@ -2,8 +2,8 @@ CommunityToolkit.Mvvm.dll
|
||||
de/PdfSharpCore.resources.dll
|
||||
Docnet.Core.dll
|
||||
ICSharpCode.SharpZipLib.dll
|
||||
KillerPDF.App.exe
|
||||
KillerPDF.App.exe.config
|
||||
MmdPdf.App.exe
|
||||
MmdPdf.App.exe.config
|
||||
LICENSE
|
||||
Microsoft.Bcl.AsyncInterfaces.dll
|
||||
Microsoft.Bcl.HashCode.dll
|
||||
|
||||
Reference in New Issue
Block a user